Flash/Flex学习笔记(19):颜色合成与分解的基本原理
2010-04-01 16:22
120 查看
传统的RGB颜色体系中,每一个分量值的范围都是0到255,如果转换为2进制的话最多需要8位(比如:十进制的255变成二进制则为11111111),三个分量加起来,最多需要24位长度的uint来存储.
而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0,如何高效的从一个表示颜色的unit数字中把这RGB分量提取出来?
当然:最容易想到的是利用字符串拆分,拆成二个二个一组,然后用:
而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0,如何高效的从一个表示颜色的unit数字中把这RGB分量提取出来?
当然:最容易想到的是利用字符串拆分,拆成二个二个一组,然后用:
上面这张图演示了正确做法的原理,同样将已知分量合成为颜色值时,也可以用类似处理,只不过顺序倒过来而已 R分量:先将其左移16位,推到左侧顶端,得到一个包含R分量,其它位置均为0的值 G分量:先将其左移8位,推到中间,得到一个包含G分量,其它位置均为0的值 B分量:不做任何处理 然后将这三个新值,位对位做或运算,只要有值(即1)的部分,就被会保留下来,从而得到新的颜色值。 var color:uint; function drawColorRect(r:uint,g:uint,b:uint) { //直接用位操作合成颜色 color=r<<16|g<<8|b; graphics.clear(); graphics.beginFill(color); graphics.drawRect(49,43,267,150); graphics.endFill(); //lbl1.text = "#" + color.toString(16); 返回16进制的值,不过该值会忽略前导的0 //获取颜色分量 var r:uint = color>>16; var g:uint = color>>8 & 0xff; var b:uint = color & 0xff; lbl1.text = "16进制分量还原结果,红:" + r.toString("16") + ",绿:" + g.toString("16") + ",蓝:" + b.toString("16"); } txtR.addEventListener(Event.CHANGE,ChangeHandler); txtG.addEventListener(Event.CHANGE,ChangeHandler); txtB.addEventListener(Event.CHANGE,ChangeHandler); function ChangeHandler(e:Event):void { drawColorRect(txtR.value,txtG.value,txtB.value); } drawColorRect(txtR.value,txtG.value,txtB.value); stop();
相关文章推荐
- Flash/Flex学习笔记(19):颜色合成与分解的基本原理
- 利用VC++实现AVI文件的合成和分解
- Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
- 如何分解和合成Gif图像
- 利用VC++实现AVI文件的合成和分解
- 利用VC++实现AVI文件的合成和分解
- 利用VC++实现AVI文件的合成和分解
- 19.如何修改UITextField的placeholder颜色
- 利用VC++实现AVI文件的合成和分解
- C# GIF图片的分解以及合成
- 粒子系统基本原理 给出粒子中心点的坐标和粒子的大小,则很容易计算出粒子所需要的4个顶点的位置坐标。粒子系统由大量的粒子构成。每个粒子具有一组属性例如位置大小纹理颜色透明度运动速度加速度生命周期等属性。
- 4、批量读取图片、视频分解、视频合成
- 小酌重构系列[19]——分解大括号
- 19:用两种颜色去染排成一个圈的6个棋子,如果通过旋转得到则只算一种,一共有多少种染色:
- android开发如何定制状态栏的颜色,同时支持4.4(KIKAT,api19)和19以上系统。
- 向量相加(力的合成) 向量相减(力的分解)
- RGB合成颜色(8:8:8 与 5:6:5 区别与转换)
- ARGB颜色合成与提取公式
- 【PS后期】PS合成中如何协调不同素材颜色
- Android中使用Color类将颜色分解为单独分量