Java BufferedImage.setRGB在类型13的图像上给出灰度?

时间:2014-03-26 15:13:30

标签: java

我对图像有一些操作,我想以特定的颜色显示图像的特定部分。但是,在某些图像上,颜色显示为灰色。

例如,如果我写:

BufferedImage baseImage = javax.imageio.ImageIO.read(new File(fileName));
System.out.println(baseImage.getType());
System.out.println(baseImage.getRGB(0, 0));
baseImage.setRGB(0, 0, Color.BLUE.getRGB());
System.out.println(baseImage.getRGB(0, 0));

我的文件是红色的单个像素。输出是:

13
-65536
-16777216

如果我保存图像,我可以看到黑色像素。

我在上一个例子中尝试了一个月亮的图像,类型是5而不是13,它运行正常。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

缓冲的图像可以是您自己发现的不同类型:http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html这取决于读取的文件。

如果您要求缓冲图像属于某种类型,则需要手动创建图像并将加载的图像绘制到其中。

E.g:

BufferedImage loadedImage = ImageIO.read(...);

BufferedImage rgbImage = new BufferedImage(loadedImage.getWidth(), loadedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
rgbImage.getGraphics().drawImage(loadedImage, 0, 0, null);