使RGB值超出负int值

时间:2012-02-17 22:58:41

标签: java graphics rgb histogram

我必须从rgb转换为hsb,以便对图像执行直方图均衡。我已将它转换回rgb,我得到的负值如-158435。任何人都可以帮我理解如何将其转换为颜色,以便我可以将其设置为我的像素?感谢

2 个答案:

答案 0 :(得分:1)

只需使用位移。它有效。

int rgb = 0x00F15D49;

int r = (rgb >>> 16) & 0xFF;
int g = (rgb >>>  8) & 0xFF;
int b = rgb & 0xFF;

然后使用此方法 Color.RGBtoHSB(int r, int g, int b, float[] hsbvals);喜欢这样:

float[] hsb = Color.RGBtoHSB(r, g, b, null);

要将其转换回来,只需使用其他方法(编辑,你是对的):

int rgb = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]);
System.out.println(Integer.toHexString(rgb));

答案 1 :(得分:0)

出现负值是因为您将颜色存储为ARGB(Alpha Red Green Blue)。 然后,alpha通道通常只是100%不透明,即255 = 0xFF。

因此,当颜色转换为32位int时,它显示为负。

示例:不透明的黑色= ARGB(255,0,0,0)= 0xFF000000 = -16777216