有人可以帮助我理解getRGB()方法的二进制输出吗?

时间:2017-07-21 10:43:05

标签: java rgb pixel

我正在学习java,我正在尝试从像素中获取RGB信息。我设法这样做了,但是,我想了解为什么当我打印出原始的getRGB()值时,我得到一个带有减号的不完整二进制数:

-100110011001100110011010

这是我的代码:

import java.io.File;
import java.io.IOException;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class MyImage {

    public static void main(String[] args) throws IOException {

        BufferedImage img = null;
        File f = null;

        try {
            f = new File("D:\\preview.jpg");
            img = ImageIO.read(f);

        } catch (IOException e) {
            System.out.println(e);
        }

        int p = img.getRGB(0, 0);
        int a = (p >> 24) & 0xff;
        int r = p >> 16 & 0xff;
        int g = p >> 8 & 0xff;
        int b = p & 0xff;
        System.out.println(a + "      " + r + "     " + g + "     " + b);
        System.out.println(Integer.toString(a, 2) + " " + Integer.toString(r, 2) + " " + Integer.toString(g, 2) + " "
                + Integer.toString(b, 2));
        System.out.println(Integer.toString(p, 2)); // why this number?

        }
}

输出:

255      102     102     102
11111111 1100110 1100110 1100110
-100110011001100110011010

1 个答案:

答案 0 :(得分:1)

每个都有8位Alpha,红色,蓝色和绿色。如果设置了整数中的第一位,则该值可以为负。这是因为4个不同的值被打包到一个整数变量中。通常,第一位确定值是否为负(2的补码)。

-100110011001100110011010 // 
  

返回默认RGB颜色模型(TYPE_INT_ARGB)和默认sRGB颜色空间中的整数像素。如果此默认模型与图像ColorModel不匹配,则会进行颜色转换。使用此方法时,返回数据中的每个颜色分量只有8位精度。

BufferedImage.getRGB