我想在Java中逐个像素地处理图像,所以我建立了一个包含颜色的一维列表。然后我将其转换为缓冲图像,但像素都错了。
所以我把它简化为下面的绝对基础。在我看来,这应该是一个左半部分是蓝色,右半部分是黑色的正方形。取而代之的是蓝色和黑色的斜条纹。有什么想法吗?
private void create(){
int w = 100;
int h = 100;
int blue;
int[] pix = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
if (x<50) {blue = 255;}
else blue=0;
pix[index++] = blue;
}
}
image = new BufferedImage(100,100, BufferedImage.TYPE_INT_RGB);
image.setRGB(0, 0, 100, 100, pix, 0, 1);
您弄错了步幅变量此行:
image.setRGB(0, 0, 100, 100, pix, 0, 1);
需要更改为:
image.setRGB(0, 0, 100, 100, pix, 0, 100);
有一些小的更改可以提高可读性,但您可以处理这些更改。上面的更改将解决您询问的问题