Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中将索引图像转换为RGB图像?_Java_Image_Imagemagick_Rgb_Jmagick - Fatal编程技术网

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

如何在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位图像。无论如何 同样的方法不适用

我有一个彩色索引TIFF图像(8位),我想将其转换为RGB 24位图像(未索引)。那怎么办呢

我在用JMagick。奇怪的是,当我使用以下命令时,它可以很好地用于索引的8位灰度图像:

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;
}