setrgb java_java-在BufferedImage上执行setRGB会将像素更改为...

**重要更新,请参见下文! **

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值