java - 了解 BufferedImage.getRGB 输出值

标签 java image-processing colors rgb bufferedimage

我使用此方法获取图像中像素的整数值:

int colour = img.getRGB(x, y);

然后我打印出这些值,我看到黑色像素对应于“-16777216”之类的值,一种蓝色对应于“-16755216”等值。有人可以解释一下这背后的逻辑吗?值(value)?

最佳答案

RGB int 颜色在其位中包含颜色的红、绿、蓝分量。您必须查看其二进制或十六进制表示形式,而不是将其视为整个整数(而不是查看其十进制表示形式)。

int 有 32 位,3x8 = 24 用于存储 RGB 分量(每个 8 位),格式如下:

               2          1          0
bitpos      32109876 54321098 76543210
------   --+--------+--------+--------+
bits     ..|RRRRRRRR|GGGGGGGG|BBBBBBBB|

您可以使用位掩码提取或设置组件:

int color = img.getRGB(x, y);

// Components will be in the range of 0..255:
int blue = color & 0xff;
int green = (color & 0xff00) >> 8;
int red = (color & 0xff0000) >> 16;

如果颜色还具有 alpha 分量(透明度)ARGB,则它会获取最后剩余的 8 位。

           3          2          1          0
bitpos    10987654 32109876 54321098 76543210
------   +--------+--------+--------+--------+
bits     |AAAAAAAA|RRRRRRRR|GGGGGGGG|BBBBBBBB|

以及值:

int alpha = (color & 0xff000000) >>> 24; // Note the >>> shift
                                         // required due to sign bit

alpha 值为 255 表示颜色完全不透明,值为 0 表示颜色完全透明。

您的颜色:

您的颜色是color = -16755216,其中包含:

blue : 240         // Strong blue
green:  85         // A little green mixed in
red  :   0         // No red component at all
alpha: 255         // Completely opaque

关于java - 了解 BufferedImage.getRGB 输出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57262625/

相关文章:

java - 在 PHP 中运行 shell_exec ('which java' ) 什么都不返回

java - 如何在Java中设置Fork/Join算法的阈值?

c++ - 比较两个人脸opencv

algorithm - 在图像中定位桥状结构的端点

java - Android MediaPlayer 无法使用 Uri.parse(path) 播放文件名中包含 '#' 字符的文件

java - 为什么我的 ThreadPool 没有在 Java 中并行运行?

python - 使用 numpy 进行图像翻译

Java - 多色文本

java - 查找图像 OpenCV Android SDK 中的颜色百分比

C#,如何在 RGB 中生成仅与 CMYK 兼容的颜色