我从其他地方获得此代码,但我仍然对此感到困惑
final byte[] pixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
int[][] result = new int[height][width];
int k = 0;
final int pixelLength = 3;
for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) {
int argb = 0;
int blue= (((int) pixels[pixel] & 0xff));
argb = argb + blue;
int green = (((int) pixels[pixel + 1] & 0xff) << 8);
argb = argb + green; // green)
int red = (((int) pixels[pixel + 2] & 0xff) << 16);
argb = argb + red;
result[row][col] = argb;
k++;
col++;
if (col == width) {
col = 0;
row++;
}
}
当我打印红色,绿色,蓝色为什么不打印rgb值? 谁能向我解释一下?像素的含义[像素]&amp; 0xff? 很久以前:D
答案 0 :(得分:0)
这样做是将3个字节转换为单个int。使用pixels[pixel] & 0xff
的原因是它会转换signed values to unsigned values。这是必要的,因为java没有无符号类型,因此通常为200的RGB值实际上是其他东西。
转换的目的是将3个值放在同一个地方,这样它们就是彼此相邻的值。