使用移位寄存器java获取rgb

时间:2014-08-30 02:34:25

标签: java image-processing rgb pixel bufferedimage

我从其他地方获得此代码,但我仍然对此感到困惑

  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

1 个答案:

答案 0 :(得分:0)

这样做是将3个字节转换为单个int。使用pixels[pixel] & 0xff的原因是它会转换signed values to unsigned values。这是必要的,因为java没有无符号类型,因此通常为200的RGB值实际上是其他东西。

转换的目的是将3个值放在同一个地方,这样它们就是彼此相邻的值。