我使用此方法获取图像中像素的整数值:
int colour = img.getRGB(x, y);
然后我打印出这些值,我看到黑色像素对应于“-16777216”之类的值,一种蓝色对应于“-16755216”之类的值,等等。有人可以解释一下这个值背后的逻辑吗?
原文由 leonardo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我使用此方法获取图像中像素的整数值:
int colour = img.getRGB(x, y);
然后我打印出这些值,我看到黑色像素对应于“-16777216”之类的值,一种蓝色对应于“-16755216”之类的值,等等。有人可以解释一下这个值背后的逻辑吗?
原文由 leonardo 发布,翻译遵循 CC BY-SA 4.0 许可协议
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
原文由 icza 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
getRGB(int x, int y)
返回位置 (x,y) 处颜色像素的值。您误解了返回值。
它是二进制格式。像 11…11010101,它作为 int 值提供给您。
如果您想获得该值的 RGB(即红、绿、蓝)分量,请使用 Color 类。例如
Then you can get the Red, Green, Blue, or Alpha values by using
getRed()
,getGreen()
,getBlue()
,getAlpha()
.然后这些方法将以熟悉的格式返回一个int
值0 < value < 255
如果您不想使用
Color
类,那么您将需要使用按位运算来获取它的值。