2
我可以读取图像并写入图像,图像看起来很完美。所以这就行了。在Java中使用BufferedImage
我觉得我在换位时遇到困难。因为当我测试打印前3个RGB int值,然后测试后打印3个int值时,它们没有相同的值?但是我再次运行该程序,第一个打印值与之前的第一个打印值相同?
OK,下面是代码时,我咬了移值到红,绿和蓝阵列
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
但请记住,当我再次运行程序时,会显示完全相同的值(在本例中为上述相同的输出)。并且还创建了一个准确的图像。我只是不确定在位移之前和之后的值是不是一样的?
希望这个很清楚吗? 谢谢
在原来的数字开始额外'0xff'通常是指颜色的Alpha值,并且在这种情况下' 0xff'意味着完全不透明 – Sam
所以我需要将最左边的8位移位成一个alpha数组,然后反过来回到一个rgb int以获得相同的值?谢谢 –
@DouglasGrealis你可以额外储存阿尔法值,只需要按照你现在的方式来移动它(只需移动24)。或者,如果您知道alpha始终为0xff,则可以始终将0xff左移到结果中。就目前而言,您将Alpha保留在0x00,这意味着“完全透明” – Sam