我正在学习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

最佳答案

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

-100110011001100110011010 //



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


BufferedImage.getRGB

07-26 07:44