如何在Java中将索引图像转换为RGB图像?
我有一个彩色索引TIFF图像(8位),我想将其转换为RGB 24位图像(未索引)。那怎么办呢 我在用JMagick。奇怪的是,当我使用以下命令时,它可以很好地用于索引的8位灰度图像:如何在Java中将索引图像转换为RGB图像?,java,image,imagemagick,rgb,jmagick,Java,Image,Imagemagick,Rgb,Jmagick,我有一个彩色索引TIFF图像(8位),我想将其转换为RGB 24位图像(未索引)。那怎么办呢 我在用JMagick。奇怪的是,当我使用以下命令时,它可以很好地用于索引的8位灰度图像: image.transformRgbImage(info.getColorspace()); 即使图像,尽管不再被索引,在那之后仍然是8位,这是幸运的,因为它是灰度的,实际上应该是8位。奇怪的是transformRgbImage()执行了这个操作,尽管我更希望它能将图像转换为24位图像。无论如何 同样的方法不适用
image.transformRgbImage(info.getColorspace());
即使图像,尽管不再被索引,在那之后仍然是8位,这是幸运的,因为它是灰度的,实际上应该是8位。奇怪的是transformRgbImage()执行了这个操作,尽管我更希望它能将图像转换为24位图像。无论如何
同样的方法不适用于彩色索引的8位图像。我只是不知道如何使用jmagikapi来实现这个目标。我试着设置:
image.setDepth(24);
或:
但两者都会导致异常访问冲突。当我设定:
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;
}
你的图像有透明度吗?24位和32位之间的唯一区别是透明度。索引图像也支持透明度(一个透明像素索引)。。。我得到的唯一软件是GIMP,它不会像透明通道那样以选中模式显示背景。另外,我的形象是一个TIFF。TIFF不能有一个透明的颜色,是吗?我一直在努力,而它是那么简单!非常感谢你的回答。现在我要做的是重置分辨率和压缩设置,这是在过程中丢失的。
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;
}