**重要更新,请参见下文! **
我正在创建一个程序,当该像素满足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是以灰度方式修改我的图片的.我认为这实际上是一个相当简单的问题,但是解决方案使我难以理解.