Java 来自pixelmed的dicom BuffereImage具有低对比度

Java 来自pixelmed的dicom BuffereImage具有低对比度,java,jframe,bufferedimage,dicom,Java,Jframe,Bufferedimage,Dicom,我想在java程序中显示DICOM图像。我正在使用pixelmed。但是,我发现我不能正确显示正确的对比度。对比度太低了 这是我的密码: (SourceImage是PixelMed提供的一个类,chosenImageFile.getPath()只是DICOM文件的路径。) DicomigDisplayer1是一个扩展JPanel的类。此JPanel类的setImage()将调用JFrame类的setImage() JFrame类的setImage()代码: 颜色模型有问题吗?请帮忙。谢谢。您的图

我想在java程序中显示DICOM图像。我正在使用pixelmed。但是,我发现我不能正确显示正确的对比度。对比度太低了

这是我的密码:

(SourceImage是PixelMed提供的一个类,chosenImageFile.getPath()只是DICOM文件的路径。)

DicomigDisplayer1是一个扩展JPanel的类。此JPanel类的setImage()将调用JFrame类的setImage()

JFrame类的setImage()代码:


颜色模型有问题吗?请帮忙。谢谢。

您的图像有规定的窗口宽度/窗口中心吗?请确保已设置(或允许用户进行调整)。请参阅-有一些静态方法可将窗口应用于缓冲图像。

在其他应用程序中,图像看起来是否不同,或者您是否假设对比度错误?原始图像的颜色模型是什么?@Nanherin,我不知道颜色模型。但是当我在另一个应用程序中打开它时,它看起来就不同了。你总是可以尝试打印颜色模型(即:
System.out.println(source.getColorModel())
),看看这是否给了我们一些线索。或者发布一些屏幕截图,将“另一个应用程序”与您的进行比较?您是否尝试过使用
ColorConvertOp
而不是仅在RGB
buffereImage
上绘制?在ICC颜色转换中可能更精确。有人知道行g2d.drawImage(image,0,0,null)是否正确吗;实际上是从一种颜色模型转换到另一种颜色模型,或者它是如何工作的?@Nanhydrin我知道,如果我有一个带有CMYK颜色模型的
BuffereImage
,并使用RGB颜色模型将其绘制到
BuffereImage
,它将被转换(并且速度会很慢;-)。但不确定是否在幕后实际使用了
ColorConvertOp
,或者是否执行了不同的转换。
SourceImage dimg = new SourceImage(chosenImageFile.getPath());
BufferedImage image = dimg.getBufferedImage();

BufferedImage source = new BufferedImage(image.getWidth(), image.getHeight(),    BufferedImage.TYPE_INT_RGB);

Graphics2D g2d = source.createGraphics();
g2d.drawImage(image, 0, 0, null);
dicomImgDisplayer1.setImage(source);
public void setImage(BufferedImage image) {
   this.image = image;
   setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
   repaint();
   revalidate();
}

public void paint(Graphics graphics) {
   Graphics2D g2d = (Graphics2D) graphics;
   g2d.drawImage(image, null, 0, 0);
}