两值位图,白色是1,黑色是java中的0?

时间:2011-12-22 03:19:42

标签: java bitmap digital

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

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

1 个答案:

答案 0 :(得分: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 Reference给出了如何正确执行此操作的一个很好的示例。在您的问题中使用-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参考,例如如何正确处理像素数据的代码。