【发布时间】:2014-02-24 06:52:31
【问题描述】:
** 重要更新,见下文! **
我正在创建一个程序,当该像素满足 Java 中的一组条件时,该程序将 BufferedImage 的像素更改为某种颜色。但是,当我将图像写入磁盘时,应该着色的像素却变成了黑色。
首先我使用 RGB 代码定义颜色:
Color purple = new Color(82, 0, 99);
int PURPLE = purple.getRGB();
然后我将要更改的图像从文件读取到名为“空白”的 BufferedImage:
BufferedImage blank = ImageIO.read(new File("some path"));
现在,循环遍历像素,当位置 (x, y) 的像素符合条件时,将其颜色更改为紫色:
blank.setRGB(x, y, PURPLE);
现在,将“空白”写入磁盘。
File output = new File("some other path");
ImageIO.write(blankIn, "png", output); // try-catch blocks intentionally left out
生成的文件应该是带有一些紫色像素的“空白”,但有问题的像素是黑色的。我知道问题出在 setRGB 而不是任何导入或导出函数,因为“空白”本身是彩色图像,因此被写入文件。我阅读并看到很多帖子建议我使用 Graphics2D 并避免 setRGB,但没有讨论逐像素颜色变化。
我也试过直接位操作,像这样:
blank.setRGB(x, y, ((82 << 16) + (0 << 8) + 99));
我可能做错了,但如果我把它放对了也没关系,因为当我这样做时像素被设置为透明(不管数字怎么说,这很奇怪,至少可以说)。
** 当我尝试这个时:
blank.setRGB(x, y, Color.RED.getRGB());
我的输出文件是灰度的,这意味着 setRGB 实际上是在修改我的灰度图片。我认为这实际上是一个相当简单的问题,但解决方案却让我望而却步。
【问题讨论】:
标签: java bufferedimage javax.imageio