在你说这是一个重复的问题之前,请听我说。我已经查看了其他问题,并且我(大概)使用了正确的方法来获取RGB值并将其存储为整数像素。
我的代码:
// load pixels into an image
BufferedImage image = new BufferedImage(adjWidth,
this.height,
BufferedImage.TYPE_3BYTE_BGR);
int iwidth = 0;
int iheight = 0;
for(int i = 0; i < this.height; i++) {
for(int j = 0; j < adjWidth - 2; j += 3) {
int index = adjWidth*i + j;
int b = iData[index];
int g = iData[index+1];
int r = iData[index+2];
int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff); // merge rgb values to single int
int red = (rgb>>16)&0x0ff;
int green =(rgb>>8) &0x0ff;
int blue = (rgb) &0x0ff;
if(rgb != 0) {
System.out.printf("\nRow: %s\nColumn: %s\nRed: %s\nGreen: %s\nBlue: %s\n", i, j, red, green, blue);
System.out.println("Color value: " + rgb);
image.setRGB(iwidth, iheight, rgb);
iwidth++;
iheight++;
}
}
}
其中adjWidth是为填充调整的宽度,iData是图像数据的字节数组。 我查看了我的输出,我看到了:
Row: 0
Column: 0
Red: 166
Green: 0
Blue: 0
Color value: 10878976
所以颜色值显然是错误的(当我使用setRGB()时会抛出错误),但为什么这个错了?