Flash/Flex学习笔记(19):颜色合成与分解的基本原理
2010-11-22 16:43
169 查看
传统的RGB颜色体系中,每一个分量值的范围都是0到255,如果转换为2进制的话最多需要8位(比如:十进制的255变成二进制则为11111111),三个分量加起来,最多需要24位长度的uint来存储.
而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0,如何高效的从一个表示颜色的unit数字中把这RGB分量提取出来?
当然:最容易想到的是利用字符串拆分,拆成二个二个一组,然后用:
view source
print?
来还原,但是这种方法的效率是很低的,先要转成字符串,再拆分,然后再转为数字。
![](http://pic002.cnblogs.com/img/yjmyzz/201004/2010040116212421.gif)
上面这张图演示了正确做法的原理,同样将已知分量合成为颜色值时,也可以用类似处理,只不过顺序倒过来而已
R分量:先将其左移16位,推到左侧顶端,得到一个包含R分量,其它位置均为0的值
G分量:先将其左移8位,推到中间,得到一个包含G分量,其它位置均为0的值
B分量:不做任何处理
然后将这三个新值,位对位做或运算,只要有值(即1)的部分,就被会保留下来,从而得到新的颜色值。
view source
print?
而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0,如何高效的从一个表示颜色的unit数字中把这RGB分量提取出来?
当然:最容易想到的是利用字符串拆分,拆成二个二个一组,然后用:
view source
print?
1
var
r:
uint
=
parseInt
(
"FF"
,
16
);
2
trace
(r);
来还原,但是这种方法的效率是很低的,先要转成字符串,再拆分,然后再转为数字。
![](http://pic002.cnblogs.com/img/yjmyzz/201004/2010040116212421.gif)
上面这张图演示了正确做法的原理,同样将已知分量合成为颜色值时,也可以用类似处理,只不过顺序倒过来而已
R分量:先将其左移16位,推到左侧顶端,得到一个包含R分量,其它位置均为0的值
G分量:先将其左移8位,推到中间,得到一个包含G分量,其它位置均为0的值
B分量:不做任何处理
然后将这三个新值,位对位做或运算,只要有值(即1)的部分,就被会保留下来,从而得到新的颜色值。
view source
print?
01
var
color:
uint
;
02
03
function
drawColorRect(r:
uint
,g:
uint
,b:
uint
) {
04
//直接用位操作合成颜色
05
color=r<<
16
|g<<
8
|b;
06
graphics.clear();
07
graphics.beginFill(color);
08
graphics.drawRect(
49
,
43
,
267
,
150
);
09
graphics.endFill();
10
11
//lbl1.text ="#" + color.toString(16);返回16进制的值,不过该值会忽略前导的0
12
13
//获取颜色分量
14
var
r:
uint
=color>>
16
;
15
var
g:
uint
=color>>
8
&
0xff
;
16
var
b:
uint
=color &
0xff
;
17
lbl1.text =
"16进制分量还原结果,红:"
+ r.toString(
"16"
) +
",绿:"
+ g.toString(
"16"
) +
",蓝:"
+ b.toString(
"16"
);
18
19
}
20
21
txtR.addEventListener(Event.CHANGE,ChangeHandler);
22
txtG.addEventListener(Event.CHANGE,ChangeHandler);
23
txtB.addEventListener(Event.CHANGE,ChangeHandler);
24
25
function
ChangeHandler(e:Event):
void
{
26
drawColorRect(txtR.value,txtG.value,txtB.value);
27
}
28
29
drawColorRect(txtR.value,txtG.value,txtB.value);
30
31
stop();
相关文章推荐
- Flash/Flex学习笔记(19):颜色合成与分解的基本原理
- ARGB颜色合成与提取公式
- 利用VC++实现AVI文件的合成和分解
- OpenCV Mat图像颜色通道分离(split)合成(merge),各通道合图显示
- 如何分解和合成Gif图像
- 利用VC++实现AVI文件的合成和分解
- 利用VC++实现AVI文件的合成和分解
- 颜色空间和Opencv中的色彩空间分离与合成
- [BS-19]更改UITextField的placeholder文字颜色的5种方法
- 【PS后期】PS合成中如何协调不同素材颜色
- 使用cocos2d-x把TP合成的大图分解成原来的小图
- ROM的分解以及合成、BIN打包、PP修改超强rom工具osnbtool详解
- 利用VC++实现AVI文件的合成和分解
- Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
- ARGB颜色合成与提取公式
- 19、深入理解计算机系统笔记,虚拟存储器,基本原理(1)
- IOS视频分解图片、图片合成视频
- 算数基本原理(唯一分解定理)
- 粒子系统基本原理 给出粒子中心点的坐标和粒子的大小,则很容易计算出粒子所需要的4个顶点的位置坐标。粒子系统由大量的粒子构成。每个粒子具有一组属性例如位置大小纹理颜色透明度运动速度加速度生命周期等属性。
- API 19即android4.4以上,设置一体化状态栏背景颜色的方法