【问题标题】:get rgb using shift register java使用移位寄存器java获取rgb
【发布时间】:2014-08-30 02:34:24
【问题描述】:

我从其他地方得到了这段代码,但我仍然对

感到困惑
  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 值? 有人可以向我解释吗?像素[像素] & 0xff 是什么意思? 非常感谢:D

【问题讨论】:

    标签: java image-processing rgb pixel bufferedimage


    【解决方案1】:

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

    移位的目的是将 3 个值放在同一个位置,使值彼此相邻。

    【讨论】:

    • 要将问题标记为已解决,请单击我的答案投票标志下方的复选标记。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多