技术好文共享:色彩之RGB和灰阶

简介: 技术好文共享:色彩之RGB和灰阶

RGB基础:RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216种颜色。


RGB应用:目前的显示器大都是采用了RGB颜色标准,在显示器上,是通过电子枪打在屏幕的红、绿、蓝三色发光极上来产生色彩的,目前的电脑一般都能显示32位颜色,约有一百万种以上的颜色;在led领域利用三合一点阵全彩技术, 即在一个发光单元里由RGB三色晶片组成全彩像素。随着这一技术的不断成熟,led显示技术会给人们带来更加丰富真实的色彩感受。


选择RGB的生理原因:RGB三原色的原理不是出于物理原因,而是由于生理原因造成的。人的眼睛内有几种辨别颜色的锥形感光细胞,分别对黄绿色、绿色和蓝紫色(或称紫罗兰色)的光最敏感(波长分别为564、534和420纳米),如果辨别黄绿色的细胞受到的刺激略大于辨别绿色的细胞,人的感觉是黄色;如果辨别黄绿色的细胞受到的刺激大大高于辨别绿色的细胞,人的感觉是红色。虽然三种细胞并不是分别对红色、绿色和蓝色最敏感,但这三种光可以分别对三种锥形细胞产生刺激。


不同的生物眼中辨别颜色的细胞并不相同,例如鸟类眼中有四种分别对不同波长光线敏感的细胞,而一般哺乳动物只有两种,所以对它们来说只有两种原色光。


既然“三原色的原理不是出于物理原因,而是由于生理原因造成的”,那么前段所说的“用三种原色的光以不同的比例加和到一起,形成各种颜色的光”显然就不大合适。使用三原色并不足以重现所有的色彩,准确地说法应该是“将三原色光以不同的比例复合后,对人的眼睛可以形成与各种频率的可见光等效的色觉。”只有那些在三原色的色度所定义的颜色三角内的颜色,才可以利用三原色的光以非负量相加混合得到。


例如,红光与绿光按某种比例复合,对三种锥状细胞刺激后产生的色觉可与眼睛对单纯的黄光的色觉等效。但决不能认为红光与绿光按某种比例复合后生成黄光,或黄光是由红光和绿光复合而成的。三种色光的加,红光加绿光成为黄光,黄光加蓝光成为白光。


RGB几何表示:颜色通常都是用三种成分来定义的,不仅RGB颜色模型是这样,其它比如CIELAB和Y'UV也是如此。于是便采用三维空间来进行描述,把三种成分的数值当做欧几里得空间中普通笛卡尔坐标系的坐标值。在RGB模型中使用0到1之间的非负数作为立方体的坐标值,将原点(0,0,0)作为黑色,强度值沿坐标轴方向递增到达位于对角线(1,1,1)处的白色。


一个RGB组合(r,g,b)表示代表一个给定颜色的点在立方体内部、表面或者边上的三维坐标。这种表示方法使得在计算两个颜色相近程度时只需简单计算它们之间的距离:距离越短颜色越接近。如下图表示RGB颜色模型映射到一个立方体上。水平的x轴代表红色,向左增加。y轴代表蓝色,向右下方向增加。竖直的z轴代表绿色,向上增加。原点代表黑色,遮挡在立方体背面。,


RGB原理:RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。


有色光可被无色光冲淡并变亮。如蓝色光与白光相遇,结果是产生更加明亮的浅蓝色光。知道它的混合原理后,在软件中设定颜色就容易理解了。


红、绿、蓝三盏灯的叠加情况,中心三色最亮的叠加区为白色,加法混合的特点:越叠加越明亮。


红、绿、蓝三个颜色通道每种色各分为255阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色数值相同时为无色彩的灰度色,而三色都为255时为最亮的白色,都为0时为黑色。


RGB 颜色称为加成色,因为您通过将 R、G 和 B 添加在一起(即所有光线反射回眼睛)可产生白色。加成色用于照明光、电视和计算机显示器。例如,显示器通过红色、绿色和蓝色荧光粉发射光线产生颜色。绝大多数可视光谱都可表示为红、绿、蓝 (RGB) 三色光在不同比例和强度上的混合。这些颜色若发生重叠,则产生青、洋红和黄。


RGB语法://代码效果参考:http://www.lyjsj.net.cn/wz/art_23961.html

( red,green,blue ) 参数red:integer类型,指定颜色中的红色分量强度,有效值在0到255之间;green:integer类型,指定颜色中的绿色分量强度,有效值在0到255之间;blue:integer类型,指定颜色中的蓝色分量强度,有效值在0到255之间返回值Long。函数执行成功时返回由指定分量确定的颜色,用长整数表示。发生错误时返回-1。如果任何参数的值为NULL,RGB()函数返回NULL。

用法RGB()函数使用下述公式计算表示颜色的长整数:65536 Blue + 256 Green+Red其中,Blue代表蓝色分量,Green代表绿色分量,Red代表红色分量。各分量中,数值越小,亮度越低,数值越大,亮度越高。


RGB格式:对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。但是,它缺乏与早期黑白显示系统的良好兼容性。因此,许多电子电器厂商普遍采用的做法是,将RGB转换成YUV颜色空同,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。


由于网页(WEB)是基于计算机浏览器开发的媒体,所以颜色以光学颜色RGB(红、绿、蓝)为主。网页颜色是以16进制代码表示,一般格式为#DEFABC (字母范围从A-F,数字从0-9 );如黑色,在网页代码中便是:#000000(在css编写中可简写为#000)。当颜色代码为#AABB11时,可以简写为#AB1表示,如#135与#113355表示同样的颜色。


RGB格式简介:RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真//代码效果参考:http://www.lyjsj.net.cn/wx/art_23959.html

正的颜色值,而是当前像素颜色值在调色板中的索引。以RGB1(2色位图)为例,比如它的调色板中定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色),那么图像数据001101010111…(每个像素用1位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白…。

RGB565


RGB565使用16位表示一个像素,这16位中的5位用于R,6位用于G,5位用于B。程序中通常使用一个字(WORD,一个字等于两个字节)来操作一个像素。当读出一个像素后,这个字的各个位意义如下:


高字节 低字节


R R R R R G G G G G G B B B B B


可以组合使用屏蔽字和移位操作来得到RGB各分量的值:


#define RGB565_MASK_RED 0xF800


#define RGB565_MASK_GREEN 0x07E0


#define RGB565_MASK_BLUE 0x001F


R = (wPixel & RGB565_MASK_RED) ] 11; // 取值范围0-31


G = (wPixel & RGB565_MASK_GREEN) ] 5; // 取值范围0-63


B = wPixel & RGB565_MASK_BLUE; // 取值范围0-31


#define RGB(r,g,b) (unsigned int)( (r|0x08 [ 11) | (g|0x08 [ 6) | b|0x08 )


#define RGB(r,g,b) (unsigned int)( (r|0x08 [ 10) | (g|0x08 [ 5) | b|0x08 )


该代码可以解决24位与16位相互转换的问题


RGB555


RGB555是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。使用一个字读出一个像素后,这个字的各个位意义如下:


高字节 低字节


X R R R R R G G G G G B B B B B (X表示不用,可以忽略)


可以组//代码效果参考:http://www.lyjsj.net.cn/wz/art_23957.html

合使用屏蔽字和移位操作来得到RGB各分量的值:

#define RGB555_MASK_RED 0x7C00


#define RGB555_MASK_GREEN 0x03E0


#define RGB555_MASK_BLUE 0x001F


R = (wPixel & RGB555_MASK_RED) ] 10; // 取值范围0-31


G = (wPixel & RGB555_MASK_GREEN) ] 5; // 取值范围0-31


B = wPixel & RGB555_MASK_BLUE; // 取值范围0-31


RGB24


RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255。注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。通常可以使用RGBTRIPLE数据结构来操作一个像素,它的定义为:


typedef struct tagRGBTRIPLE {


BYTE rgbtBlue; // 蓝色分量


BYTE rgbtGreen; // 绿色分量


BYTE rgbtRed; // 红色分量


} RGBTRIPLE;


每像素24位(比特s per pixel,bpp)编码的 RGB 值:使用三个8位无符号整数(0 到 255)表示红色、绿色和蓝色的强度。这是当前主流的标准表示方法,用于真彩色和JPEG或者TIFF等图像文件格式里的通用颜色交换。它可以产生一千六百万种颜色组合,对人眼来说其中很多已经分辨不开。


下图展示了24 bpp的RGB 立方体的三个“完全饱和”面,它们被展开到了平面上:


(0, 0, 0) 是黑色


(255, 255, 255) 是白色


(255, 0, 0) 是红色


(0, 255, 0) 是绿色


(0, 0, 255) 是蓝色


(255, 255, 0) 是黄色


(0, 255, 255) 是青色


(255, 0, 255) 是品红


黄色


(255,255,0)


绿色


(0,255,0)


青色


(0,255,255)


红色


(255,0,0)


蓝色


(0,0,255)


红色


(255,0,0)


品红色


(255,0,255)


上述定义使用了叫做“全值域” RGB 的约定。颜色值也经常被认为是取值于 0.0 到 1.0 之间,这可以被映射到其他数字编码。


使用每原色 8-比特的全值域 RGB 可以有 256 级别的白-灰-黑深浅变化,255 个级别的红色、绿色和蓝色(和它们的等量混合)的深浅变化,但是其他色相的深浅变化要少一些。由于gamma校正,256 级别不表示同等间隔的强度。


作为典型,数字视频的 RGB 不是全值域的。视频 RGB 是有比例和偏移量的约定,即 (16, 16, 16) 是黑色,(235, 235, 235) 是白色。例如,这种比例和偏移量用在了 CCIR 601 的数字 RGB 定义中。在这种模式中有16种基本颜色,它们分别是:


RGB


CMYK


HSV


颜色代码


MS-DOS对应代号


颜色名称


(255, 0, 255)


(27, 82, 0, 0)


(300°, 100%, 100%)


#FF00FF


13


品红色


(0, 0, 255)


(88, 77, 0, 0)


(240°, 100%, 100%)


#0000FF


9


蓝色


(0, 255, 255)


(52, 0, 13, 0)


(180°, 100%, 100%)


#00FFFF


11


青色


(0, 255, 0)


(63, 0, 100, 0)


(120°, 100%, 100%)


#00FF00


10


绿色


(255, 255, 0)


(6, 0, 97, 0)


(60°, 100%, 100%)


#FFFF00


14


黄色


(255, 0, 0)


(0, 99, 100, 0)


(0°, 100%, 100%)


#FF0000


12


红色


(128, 0, 128)


(61, 100, 14, 3)


(300°, 100%, 50%)


#800080


5


紫色


(0, 0, 128)


(100, 98, 14, 17)


(240°, 100%, 50%)


#000080


1


深蓝色


(0, 128, 128)


(86, 31, 49, 8)


(180°, 100%, 50%)


#008080


3


鸭绿色


(0, 128, 0)


(87, 24, 100, 13)


(120°, 100%, 50%)


#008000


2


深绿色


(128, 128, 0)


(51, 36, 100, 13)


(60°, 100%, 50%)


#808000


6


橄榄色


(128, 0, 0)


(29, 100, 100, 38)


(0°, 100%, 50%)


#800000


4


栗色


(0, 0, 0)


(75, 68, 67, 90)


(0°, 0%, 0%)


#000000


0


黑色


(128, 128, 128)


(52, 43, 43, 8)


(0°, 0%, 50%)


#808080


8


灰色


(192, 192, 192)


(25, 20, 20, 0)


(0°, 0%, 75%)


#C0C0C0


7


银色


(255, 255, 255)


(0, 0, 0, 0)


(0°, 0%, 100%)


#FFFFFF


15


白色


RGB32


RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB32。)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:


typedef struct tagRGBQUAD {


BYTE rgbBlue; // 蓝色分量


BYTE rgbGreen; // 绿色分量


BYTE rgbRed; // 红色分量


BYTE rgbReserved; // 保留字节(用作Alpha通道或忽略)


} RGBQUAD。


RGB48


这种模式分配到每种原色16比特,每种颜色可以有65536个色调,是一种专业用的图象编辑显示,如用于Photoshop,可以制作颜色非常精确的图象。


灰阶简介:1、通常来说,液晶屏幕上人们肉眼所见的一个点,即一个像素,它是由红、绿、蓝(RGB)三个子像素组成的。每一个子像素,其背后的光源都可以显现出不同的亮度级别。而灰阶代表了由最暗到最亮之间不同亮度的层次级别。这中间层级越多,所能够呈现的画面效果也就越细腻。以8bit panel为例,能表现2的8次方,等于256个亮度层次,我们就称之为256灰阶。LCD屏幕上每个像素,均由不同亮度层次的红、绿、蓝组合起来,最终形成不同的色彩点。也就是说,屏幕上每一个点的色彩变化,其实都是由构成这个点的三个RGB子像素的灰阶变化所带来的。


资料参考:


1.百度百科,链接: ,


2.维基百科,链接:

相关文章
|
人工智能 JavaScript 前端开发
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定
Vue是采用数据劫持结合发布者-订阅者模式的方式,通过使用ES5中的Object.defineProperty()方法来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调来渲染视图。
807 0
【Vue2从入门到精通】详解Vue数据双向绑定原理及手动实现双向绑定
|
安全 Shell Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 重启 reboot命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 重启 reboot命令 使用指南
782 0
|
监控 安全 网络安全
SOC:简介、功能及其优点
【8月更文挑战第19天】
1407 0
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
9681 2
|
搜索推荐
报错信息 "busy p..."
报错信息 "busy p..."
1413 1
|
存储 编解码 人工智能
自媒体影视后期数字助理2--SDR与HDR中间件设计
阿里云提供的线上AI能力在处理视觉信息方面已经有较为成熟和通用的产品,对于开始兴建媒体资源管理平台的自媒体来说,采用阿里云的AI能力、函数计算以及OSS等产品进行平台搭建可以快速实现建设与能力扩充。本文为SDR与HDR中间件的开发思路、技术架构设计和开发实战中参数的设置介绍,对一些数字影像的基础概念和阿里云视觉人工智能的API细节进行了分析。
754 98
自媒体影视后期数字助理2--SDR与HDR中间件设计
|
存储 编译器 内存技术
【计算机组成原理】中央处理器
【计算机组成原理】中央处理器
621 1
【计算机组成原理】中央处理器
|
数据采集 API
快手商品数据采集神器,助你轻松获取商品详情数据
快手商品数据采集神器,助你轻松获取商品详情数据
|
存储 C#
C# | 二进制字符串(“101010101”)、字节数组(byte[])互相转换
当我们在计算机中处理数据时,经常需要将数据从一种格式转换为另一种格式。而本文的将二进制字符串转换为字节数组听起来很稀松平常但实际又不是那么常见的特殊的转换方式。 二进制字符串是由 0 和 1 组成的字符串,比如:“0111010010101000”。 字节数组常用于读取和写入二进制文件、网络通信等。
1335 0
|
存储 弹性计算 固态存储
阿里云服务器8核32G配置租用一年多少钱?公网带宽和系统盘是如何收费的?
本文介绍了阿里云服务器8核32G配置最新的租用费用,包含收费标准及最新活动价格和公网带宽和系统盘收费情况以及后续升级续费最新优惠政策等。
2769 0
阿里云服务器8核32G配置租用一年多少钱?公网带宽和系统盘是如何收费的?