1

我使用类PixelGrabber来获取一个二值位图的像素数组。但是出现了一个问题,一个二值图像(白色或黑色),我将位图的这些像素存储在一个 int 数组中,数组的这些元素不应该是 1(白色)或 0(黑色),而是在我的我发现白色是-1,黑色是-16777216的代码。有谁知道为什么?

现在我只想简单地使用for循环将 -1 和 -16777216 更改为 1 和 0。

4

1 回答 1

3

我假设您正在使用PixelGrabber(ImageProducer ip, int x, int y, int w, int h, int[] pix, int off, int scansize)构造函数,在这种情况下,您得到的是每个像素的 RGB 值的整数数组。

因为它以 RGB 值的形式返回 - 您需要分离出这些值以提供真正的 RGB 值。例如 RGB(255,255,255) 是白色,RGB(0,0,0) 是黑色。API 参考给出了如何正确执行此操作的一个很好的示例。使用-16777216您问题中的数字,我进行了一个简单的测试,表明它实际上是黑色的:

public class Main {

    public static void main(String[] args) {
        int pixel = -16777216;

        int alpha = (pixel >> 24) & 0xff;
        int red   = (pixel >> 16) & 0xff;
        int green = (pixel >>  8) & 0xff;
        int blue  = (pixel      ) & 0xff;

        System.out.println(alpha);
        System.out.println(red);
        System.out.println(green);
        System.out.println(blue);


    }
}

打印出来:255、0、0、0

按照上面链接的 API 参考,例如如何正确处理像素数据的代码。

于 2011-12-22T03:37:38.233 回答