java bufferedimage颜色_java – BufferedImage意外地改变了颜色

我有以下代码,它创建灰度Buffered

Image,然后设置每个像素的随机颜色.

import java.awt.image.BufferedImage;

public class Main {

public static void main(String[] args) {

BufferedImage right = new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);

int correct = 0, error = 0;

for (int i = 0; i < right.getWidth(); i++) {

for (int j = 0; j < right.getHeight(); j++) {

int average = (int) (Math.random() * 255);

int color = (0xff << 24) | (average << 16) | (average << 8) | average;

right.setRGB(i, j, color);

if(color != right.getRGB(i, j)) {

error++;

} else {

correct++;

}

}

}

System.out.println(correct + ", " + error);

}

}

大约25-30%的像素出现奇怪的行为,我设置颜色,然后它具有不同于先前设置的值.我用错误的方式设置颜色吗?

最佳答案 这是你的解决方案:禁止getRGB并使用Raster(比getRGB更快更容易)或甚至更好的DataBuffer(最快但你必须处理编码):

import java.awt.image.BufferedImage;

public class Main

{

public static void main(String[] args)

{

BufferedImage right = new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY);

int correct = 0, error = 0;

for (int x=0 ; x < right.getWidth(); x++)

for (int j = 0; j < right.getHeight(); j++)

{

int average = (int) (Math.random() * 255) ;

right.getRaster().setSample(x, y, 0, average) ;

if ( average != right.getRaster().getSample(x, y, 0) ) error++ ;

else correct++;

}

System.out.println(correct + ", " + error);

}

}

在你的情况下getRGB很糟糕,因为编码是一个字节数组(8位),你必须使用getRGB操作RGB值.栅格为您完成所有转换工作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值