我可以读取图像并写入图像,图像看起来很完美。那没关系。
我觉得我的位移很困难。因为当我测试打印前3个RGB int值,然后测试打印3个int值后,它们没有相同的值?但我再次运行程序,第一个打印值与之前的第一个打印值相同?
好的,下面是我将值移位到红色,绿色和蓝色数组时的代码
int g=0;
for(int row=0; row<h; row++)
{
for(int col=0; col<w; col++)
{
redPixels[row][col] = ((RGBarray[g]>>16)&0xff);
greenPixels[row][col] = ((RGBarray[g]>>8)&0xff);
bluePixels[row][col] = (RGBarray[g]&0xff);
g++;
}
}
下面是将值转换回整数的代码......
for(int row=0; row<h; row++)
{
for(int col=0; col<w; col++)
{
int rgb = (redPixels[row][col] & 0xff) << 16 | (greenPixels[row][col] & 0xff) << 8 |(bluePixels[row][col] & 0xff);
bufferedImage.setRGB(col, row, rgb);
}
}
在移位到数组之前的前3个int值:-16573912 -16573912 -16508119
前3个int值:203304 203304 269097
但请记住,当我再次运行程序时,会显示完全相同的值(在本例中为上面相同的输出)。并且还创建了准确的图像。我只是不确定位移前后的值是不一样的?
希望这很清楚? 感谢
答案 0 :(得分:3)
您的RGB值是24位(3 * 8),但java int是32位。如果你看一下十六进制值,差异应该更明显:
-16573912 = 0xFF031A28
203304 = 0x00031A28