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