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



我有一个颜色索引的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) 会引发这样的异常?我该怎么办?

提前感谢您的帮助。

我不了解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;
}

相关内容

  • 没有找到相关文章

最新更新