`
moguicy
  • 浏览: 8688 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
最近访客 更多访客>>
社区版块
存档分类
最新评论

Flex uint 使用RGB表示的转换 颜色合成与分解的基本原理[转]

    博客分类:
  • Flex
阅读更多

传统的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)


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

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

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

 

作者:菩提树下的杨过
出处:http://yjmyzz.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分享到:
评论

相关推荐

    uint32_t格式转int格式算法

    然而,了解基本的进制转换对于理解数据表示和计算也是很重要的。 5. **点云数据处理**: - 在点云数据处理中,`uint32_t`可能用来编码多个信息,比如XYZ坐标、颜色等。转换到`int`可能是为了进行负数坐标的表示,...

    rgb_hsl转换

    RGB(Red, Green, Blue)颜色空间基于加色混合原理,是我们常用的数字图像表示方式,它由红色、绿色和蓝色三种基本颜色的强度组合而成。而HSL(Hue, Saturation, Lightness)颜色空间则更加符合人类对颜色的认知,...

    颜色空间转换RGB2HSI

    颜色空间转换RGB2HSI HSI = RGB2HSI(RGB) converts an RGB image to HSI. The input image is assumed to be of size M-by-N-by-3, where the third dimension accounts for three image planes: red, green, and ...

    ActionScript RGB和HSV的转换

    ### ActionScript RGB与HSV色彩空间转换详解 #### 一、色彩模型基础介绍 在计算机图形学领域中,色彩模型是用来表示颜色的一种数学方法。其中,RGB 和 HSV 是两种常见的色彩模型,它们各自有着不同的特点和应用...

    YV12转RGB算法通过ffmpeg

    转换过程中,颜色空间的转换涉及到色彩科学的一些原理,比如YUV到RGB的转换公式,这通常涉及到矩阵运算。FFmpeg内部已经实现了这些复杂的计算,因此开发者可以直接利用其提供的接口,而无需深入理解底层细节。 总的...

    byte数组转uint

    public static uint ByteToInt(byte[] b) { uint u = 0; int startIndex = 0; if (b.Length == 8) u = (uint)(b[startIndex + 0] | b[startIndex + 1] | b[startIndex + 2] | b[startIndex + 3] | b[startIndex...

    RGB空间转YUV空间

    以下是RGB到YUV420转换的基本步骤和原理: 1. **定义转换矩阵**:首先,我们需要一个转换矩阵,将RGB的三个分量(R、G、B)映射到YUV的三个分量(Y、U、V)。标准的RGB到YUV转换矩阵如下: ``` Y = 0.299 * R + 0...

    BMP图片转RGB数组

    RGB(Red, Green, Blue)是颜色模型的一种,它通过红、绿、蓝三种颜色的组合来表示几乎所有的彩色。将BMP图片转换为RGB数组是图像处理中常见的操作,特别是在编程环境中,如VC++(Visual C++),这种操作有助于对...

    Matlab实现灰度图像转换成RGB图像.rar

    在MATLAB中,我们可以使用`rgb2gray`函数将RGB图像转换为灰度图像,而将灰度图像转换为RGB图像则稍显复杂,因为我们需要为每个像素生成三个通道的值。一种常见的方法是复制灰度图像的值到RGB图像的三个通道中。 ...

    matlab开发-IEEEsingle精度浮点数字uint32转换器

    标题中的“matlab开发-IEEEsingle精度浮点数字uint32转换器”指的是在MATLAB环境中,设计并实现了一个工具,能够将IEEE单精度浮点数(Single-Precision Floating-Point)与无符号32位整数(uint32)进行相互转换。...

    C++到C#数据类型转换

    在软件开发中,数据类型转换是一个非常重要的步骤,特别是在使用不同的编程语言时。C++ 和 C# 是两种非常流行的编程语言,它们之间的数据类型转换是非常必要的。本文将详细介绍 C++ 到 C# 数据类型的转换,包括基本...

    rgb 到 yuv 的转换 (绝对好用)

    RGB到YUV颜色空间转换是图像处理领域中的一个重要概念,特别是在视频编码和解码、图像显示等场景中广泛应用。RGB代表红绿蓝三原色模型,是我们常见的彩色图像表示方式,而YUV则是针对电视和视频系统设计的一种颜色...

    Flex 颜色渐变条

    可以使用Color对象的`fromARGB()`方法来创建颜色,或者使用hex字符串直接表示颜色。 2. **图形渲染**:使用DisplayObject和Graphics类绘制颜色渐变条的背景和节点。通过Graphics对象的`beginFill()`和`lineTo()`...

    操作 rgb565图像的 简单工具_JavaScript_代码_下载

    这可能包括读取二进制数据、转换颜色值、绘制图像等操作。 首先,JavaScript通过`FileReader` API可以读取本地文件,包括图像文件。通过`readAsArrayBuffer`方法,我们可以将图像文件加载为ArrayBuffer对象,这是...

    C++类各种类型转换_数据类型的相互转换_

    1. `static_cast`:用于基本数据类型的转换,结构体和类之间的转换,以及消除多态性。它通常用于安全的转换,但不能检查所有的类型错误。 2. `const_cast`:用于改变对象的const或volatile属性。这在你需要修改原本...

    RGB转16位源码 (C#)

    RGB色彩模式是最常见的一种颜色表示方式,它使用红、绿、蓝三种基色的组合来表示几乎所有的颜色。而在某些特定的场景,例如嵌入式系统或者低内存环境,可能会需要将RGB颜色数据转换为更节省存储空间的16位格式,通常...

    图像类型与彩色模型的转换

    - **说明**: 使用指定的颜色表`map`,通过颜色抖动算法实现真彩图像向索引图像的转换。 - **输入**: `RGB` 可以是`double`或`uint8`类型。 - **输出**: 如果`X`的颜色数量超过256色,则输出为`double`类型;否则输出...

    16进制数据与浮点型数据转换——c语言程序

    在IT领域,尤其是在编程中,数据的...总结来说,这个“16进制数据与浮点型数据转换——C语言程序”提供了理解和操作不同数据类型之间转换的基础,对于深入学习计算机底层工作原理以及进行相关开发工作具有重要意义。

    C++实现图像处理RGB与YUV相互转换代码

    上述代码中,我们定义了两个结构体`Pixel`和`YuvPixel`来分别表示RGB和YUV像素,然后定义了两个函数`rgb_to_yuv`和`yuv_to_rgb`来进行颜色空间的转换。注意,这里为了简化示例,我们没有考虑浮点数到整数的截断误差...

    数字大写的flex实现

    在IT行业中,尤其是在软件开发领域,经常会遇到将阿拉伯数字转换为中文大写的场景,这在财务、会计系统中尤其常见,因为中文大写可以避免数字混淆,提高账目的准确性。Flex是一款基于ActionScript的开源框架,用于...

Global site tag (gtag.js) - Google Analytics