当前位置:C++技术网 > 资讯 > 色彩基础知识全面了解:5 RGB颜色空间模型和编程中使用RGB颜色

色彩基础知识全面了解:5 RGB颜色空间模型和编程中使用RGB颜色

更新时间:2015-11-17 17:00:38浏览次数:1+次

    我们在编程时,经常会涉及到设置字体颜色,背景颜色,或者直接用不同的颜色来绘画。而此时涉及到的颜色是需要熟悉的。
    在前面的四篇文章中,分别介绍了一系列的色彩基础,请在C++技术网的搜索框中搜索文章的关键字【色彩基础知识全面了解】,即可找到所有的这一系列的文章。后面还会继续更新讲解。
    继续上一节课的《色彩基础知识全面了解4:色彩合成之原色、间色和复色分析》,我们现在来稍微讲一下编程中经常使用的RGB色彩空间以及颜色合成的情况。
    在计算机编程中,大部分使用的是RGB颜色空间。RGB颜色空间的三基色是红(Red)绿(Green)蓝(Blue)。由这个三个颜色可以合成常用的各种颜色。不管是在编写代码,还是将彩色图片存储在磁盘中,都是用RGB三种颜色来表示每一种像素,这样的图片我们都叫他位图。也就是图像每一个点都映射到图像数据的每一个像素。至于一个像素由几个字节组成,或者一个像素由多少个颜色,可以参考文章《程序员须知的三种类型的数字图像:二值图像、灰度图像和彩色图像》。
    你要知道的,用位图可以表现出丰富多彩的颜色,因此,更加逼真。另外的一种图片就是矢量图片,这种图片一般用于工程测绘等领域,平时我们很少接触。位图的颜色是由每一个像素点的颜色表示的。也就是说,一副彩色图像,每一个像素点是可以表示颜色的。像素能够表示的颜色数越多,色彩表现能力就越强,就可以越细腻。
    在编程时,三基色就是合成一个像素的颜色的三个基本值,通常叫做通道。所谓的三通道图像,也就是RGB图像咯,图像颜色由三基色合成的。三基色的每一种颜色,都可以表现出很多级,比如红色,可以有浅红、中红、深红等。这样可以理解为色彩的浓度,浓度越高,这种基色就越亮。如果这种基色浓度为零,那么这个基色就是无的。三基色如果都为零,那么合成的颜色就是黑色了。如果三基色都是百分百的浓度,则合成了纯白色。
    三基色的不同比例的混合,则可以呈现出各种不同的颜色,因为比例不一样,我们就无法叫出名字了。而平时叫的颜色名字,一般就是将基色取零或者取百分百来组合。这样的颜色都是标准的颜色。
    下面是标准的组合色:
单基色组合:
红色:RGB(255,0,0)
绿色:RGB(0,255,0)
蓝色:RGB(0,0,255)

二基色组合:
黄色:RGB(255,255,0)
青色:RGB(0,255,255)
品红:RGB(255,0,255)

三基色组合:
灰色:红绿蓝三个分量值相等,全0位黑色,全255则为白色:
黑色:RGB(0,0,0)
白色:RGB(255,255,255)

    下面是RGB颜色空间模型图:
    RGB颜色空间模型图
    三个坐标轴分别是红绿蓝,在原点则是三点为0的点,即为黑色点。在原点的斜角点处,则是三个值都是最大的(255,255,255)点,即白色。其他的则是不同的基色比例组合的一个立体颜色模型。多观察下,就熟悉了。
    在软件编程中,我们Win32中,微软定义好了一个宏RGB,让我们方便设置和使用颜色的。RGB(红,绿,蓝)中的三个值分别是红绿蓝,每一个的取值范围为0-255,返回值为COLORREF。这是Windows中的颜色类型,设置使用颜色时就需要用到这个颜色类型哦。
    使用颜色的代码如下:
COLORREF clrRed = RGB(255,0,0);// - 创建要给红色的颜色变量
SetTextColor(..,clrRed,...);// - 设置字体颜色
TextOut(...,"这是输出的文字",...);//输出文字,已经设置了文字颜色
    以上是一段伪代码,第一句是真实的,后面两个需要自己查阅MSDN来学习使用。当然,函数名可能不完全是这个哦。
    需要注意的是,在Web开发中,表示颜色则是使用一个数字串,用#开头,后面跟着三个十六进制数,顺序为红绿蓝。如#ff0000表示红色,实际上原理和RGB是一样的。