正如EJP 所指出的,掩码用于过滤掉颜色分量/通道之一(红色、绿色、蓝色)的值。这通常是您对位移/屏蔽操作所做的。你对得到的值所做的一切都是算术或更高级的数学。
颜色通道的范围是 0-255,或 0x00 - 0xFF(十六进制值)。要重建它,您需要将组件值位移回它们的位置。可以用简单的算术加法把它放在一起:
// Example values
int r = 255; // 0xFF
int g = 1; // 0x01
int b = 15; // 0x0F
// go back to original form:
// A R G B
int color = r << 16; // 0x00.FF.00.00
color += g << 8; // 0x00.FF.01.00
color += b; // 0x00.FF.01.0F
// just add back the alpha if it is going to be full on
color = += 255 << 24; // 0xFF.FF.01.0F
如果你想在颜色之间做一些插值,你需要对每个颜色分量分别进行插值,而不是将它们全部放在一个整数中。在某些情况下,将表示形式从 [0-255] 更改为十进制 [0.0f-1.0f] 也是一个好主意:
// Darken red value by 50%
int color = ...; // some color input
int mask = 0xFF;
int a = (color >> 24) & mask;
int r = (color >> 16) & mask;
int g = (color >> 8) & mask;
int b = color & mask;
// convert to decimal form:
float rDecimal = r / 255f;
// Let r: 0x66 = 102 => rDecimal: 0.4
// darken with 50%, basically divide it by two
rDecimal = r/2;
// rDecimal: 0.2
// Go back to original representation and put it back to r
r = (int)(rDecimal * 255);
// r: 51 = 0x33
// Put it all back in place
color = (a << 24) + (r << 16) + (g << 8) + b;
希望这会有所帮助。