Flash/Flex学习笔记(19):颜色合成与分解的基本原理

简介: 传统的RGB颜色体系中,每一个分量值的范围都是0到255,如果转换为2进制的话最多需要8位(比如:十进制的255变成二进制则为11111111),三个分量加起来,最多需要24位长度的uint来存储. 而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0...

传统的RGB颜色体系中,每一个分量值的范围都是0到255,如果转换为2进制的话最多需要8位(比如:十进制的255变成二进制则为11111111),三个分量加起来,最多需要24位长度的uint来存储.

而通常我们在html中喜欢用16进制比如"#FF0000"来表示红色,即R:255,G:0,B:0,如何高效的从一个表示颜色的unit数字中把这RGB分量提取出来?

当然:最容易想到的是利用字符串拆分,拆成二个二个一组,然后用:

var r:uint = parseInt("FF",16);
trace(r);


来还原,但是这种方法的效率是很低的,先要转成字符串,再拆分,然后再转为数字。
img_0ec21f16cff44781d441bae806f31941.gif

上面这张图演示了正确做法的原理,同样将已知分量合成为颜色值时,也可以用类似处理,只不过顺序倒过来而已

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();

目录
相关文章
|
前端开发
如何用CSS实现不规则形状的背景
在设计网页时,有时需要用到不规则形状的背景。这种背景可以为网页带来更加生动的效果。在这篇文章中,我们将探讨如何用CSS实现不规则形状的背景。
792 0
|
11月前
|
编解码 前端开发
图文并茂带你弄懂物理分辨率、分辨率、物理像素、逻辑像素、dpr、ppi
物理分辨率和分辨率 什么是物理像素 什么是CSS像素 什么是设备像素比 什么是标清屏和高清屏 缩放 什么是PPI(DPI)
372 0
【视觉高级篇】19 # 如何用着色器实现像素动画?2
【视觉高级篇】19 # 如何用着色器实现像素动画?
61 0
【视觉高级篇】19 # 如何用着色器实现像素动画?2
|
数据可视化 异构计算
【视觉高级篇】19 # 如何用着色器实现像素动画?
【视觉高级篇】19 # 如何用着色器实现像素动画?
70 0
【视觉高级篇】19 # 如何用着色器实现像素动画?
|
编解码 前端开发 JavaScript
【CSS】聊一聊CSS像素、设备像素、设备独立像素、dpr、ppi 之间的区别
前言 大家好,我是HoMeTown,顺着计量单位,想继续聊一下CSS像素、设备像素、设备独立像素、dpr、ppi 之间的区别。
160 0
SwiftUI—两个图像视图之间的色彩混合
SwiftUI—两个图像视图之间的色彩混合
390 0
SwiftUI—两个图像视图之间的色彩混合
|
Android开发 异构计算
Android图形显示系统——下层显示4:图层合成上(合成原理与3D合成)
Android显示之图层合成 要点 1.图层合成指综合各个窗口的绘制内容,送往LCD显示的过程。从原理上可分为在线合成与离线合成两种方式。 2.在Android的SurfaceFlinger代码流程中,图层合成方式分3D合成(OpenGL)和硬件合成两大类。 3.图形系统采用垂直同步Vsync机制,由LCD上报vsync,触发图层合成。 图层合成的原理
5838 0
|
Android开发 容器
第五章:尺寸处理(6)
经验拟合文本在具有特定尺寸的矩形内拟合文本的另一种方法涉及基于特定字体大小凭经验确定呈现文本的大小,然后向上或向下调整该字体大小。 无论可访问性设置如何,此方法都具有在所有设备上工作的优势。但是这个过程可能很棘手:第一个问题是字体大小和渲染文本的高度之间没有干净的线性关系。
916 0
|
Android开发 iOS开发 Windows