java - Java中的二值位图,白色为1,黑色为0?

标签 java bitmap digital

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

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

最佳答案

我假设您正在使用 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);


    }
}

Prints out: 255, 0, 0, 0

按照上面链接的 API 引用获取如何正确处理像素数据的示例代码。

关于java - Java中的二值位图,白色为1,黑色为0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599092/

相关文章:

java - 如何在 Netbeans ide 中设置文件路径

java - 如何通过 API 访问 Hadoop 计数器值?

java - 如何使 GridPane 中的所有单元格可见且大小相同?

java - 是否可以禁止关闭 Android 应用程序?

c - 了解 C 位宏

c - Matlab/C/Java 或任何其他数字系统程序中的正弦函数

android - 在 Android 中以正确的大小解码位图

java - Android 位图 - 内存不足

logic - FPGA有哪些实际应用?