我正在使用Java。我有一个整数:
第24-31位是阿尔法,16-23是红色, 8-15为绿色,0-7为蓝色。
我想将其更改为int:
5-7位为红色,2-4为绿色,0-1为蓝色。
我不确定如何最好地解决这个问题。 (显然,一些可表示颜色的保真度会丢失。这是可以接受的,只要它是相称的,所以颜色看起来大致相同。)
我可以分开吗?
答案 0 :(得分:3)
我建议你
int argb =
// extract the colours.
int red = (argb >> 16) & 0xFF;
int green = (argb >> 8) & 0xFF;
int blue = argb & 0xFF;
// reduce the number of bits.
red >>= 5;
green >>= 5;
blue >>= 6;
// build the new value
int rgb2 = (red << 5) + (green << 2) + blue;
答案 1 :(得分:1)
没有。你需要做位移和掩蔽。
例如,要获得红色,您需要3位。所以你需要抓住第23,22和21位的最重要的红色位。
所以
int red = ((color >> 21) & 0x07); // gets the top 3 bits of the src red, and put in bottom of int
int newColor = red << 4; // shift back up to the new color
您必须为每个组件执行此操作,或者将(|)值添加到新颜色
答案 2 :(得分:0)
对于每个组件,移位并屏蔽掉最低有效位。
从长远来看,如果col
是您的原始颜色,那么:
r = (col >> 21) & 0x07; // bits 21 - 23
g = (col >> 13) & 0x07; // bits 13 - 15
b = (col >> 6) & 0x03; // bits 6 - 7
,您的新值是:
(r << 5) | (g << 2) | b
或者,将它全部滚动到一个表达式中:
rgb = (col & 0xe00000) >> 16 | (col & 0xe000) >> 11 | (col & 0xc0) >> 6;