如何在Java中将索引图像转换为RGB图像?

时间:2013-10-25 09:28:42

标签: java image imagemagick rgb jmagick

我有一个颜色索引的TIFF图像(8位),我想将其转换为RGB 24位图像(未编入索引)。这样做的方法是什么?

我正在使用JMagick。以一种奇怪的方式,它适用于索引的8位图像,当我使用灰度时:

image.transformRgbImage(info.getColorspace());

即使图像虽然没有被索引,但仍然是8位之后,这很幸运,因为它是灰度级,实际上应该是8位。奇怪的是,transformRgbImage()执行了这一点,虽然我更希望它将图像转换为24位图像。总之...

同样的方法对于颜色索引的8位图像不起作用。我只是不知道如何使用JMagick API来实现这一目标。我尝试过设置:

image.setDepth(24);

或:

info.setDepth(24);

但两者都会导致EXCEPTION_ACCESS_VIOLATION。当我设置:

info.setDepth(32);

没有异常,1)但是图像是32位,不应该是,2)它全是黑色(1种独特的颜色)。为什么setDepth(24)会引发这样的异常?我该怎么办?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我不了解jmagick,但通常一旦你创建了一个图像对象,它的属性就固定了(大小和颜色模型)。

您没有更改图像属性,您创建具有所需目标属性的图像,并将原始图像绘制到新图像中。在普通的核心java中你只需这样做:

public BufferedImage toRGB(Image i) {
    BufferedImage rgb = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_RGB);
    rgb.createGraphics().drawImage(i, 0, 0, null);
    return rgb;
}