栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

正如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;

希望这会有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453931.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号