按位运算-如何更改现有颜色?

按位运算-如何更改现有颜色?,第1张

按位运算-如何更改现有颜色

正如EJP所指出的,这些遮罩用于过滤出颜色分量/通道之一(红色,绿色,蓝色)的值。这通常是您进行移位/屏蔽 *** 作的方式。使用获得的值所做的所有其他 *** 作都是算术或更高级的数学。

彩色通道的范围是0-255,或十六进制值是0x00-0xFF。要重建它,您需要将组件值移回原位。可以与简单的算术加法放在一起:

// Example valuesint r = 255; // 0xFFint g = 1;   // 0x01int b = 15;  // 0x0F// go back to original form://    A  R  G  Bint color = r << 16;  // 0x00.FF.00.00color += g << 8;      // 0x00.FF.01.00color += b;// 0x00.FF.01.0F// just add back the alpha if it is going to be full oncolor = += 255 << 24; // 0xFF.FF.01.0F

如果要在颜色之间进行一些插值,则需要对每个颜色分量分别进行插值,而不是将所有颜色组合在一起。在某些情况下,将表示形式从[0-255]更改为小数点后的[0.0f-1.0f]也可能是个好主意:

// Darken red value by 50%int color = ...; // some color inputint 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 tworDecimal = r/2;   // rDecimal: 0.2// Go back to original representation and put it back to rr = (int)(rDecimal * 255);   // r: 51 = 0x33// Put it all back in placecolor = (a << 24) + (r << 16) + (g << 8) + b;

希望这会有所帮助。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5429457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存