对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。但是,它缺乏与早期黑白显示系统的良好兼容性。因此,许多电子电器厂商普遍采用的做法是,将RGB转换成YUV颜色空间,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。
简单来讲,RGB在计算机中的表示主要分为两大类,一种是索引形式,一种是像素形式:
(1) 索引:
诸如RGB1, RGB4,RGB8,分别表示每个像素用1个bit, 4个bit, 8个bit来表示,那么,这些bit存储的并非是实际的R,G, B值,而是对应点的像素在调色板中的索引。
(2) 像素形式:
诸如RGB565,RGB555, RGB24,RGB32,ARGB32,这些格式,存储的是每一个像素点的R,G,B值。比如RGB24,分别用8个bit去表示R, G, B。
注释:关于调色板,可以简单理解为通过编号映射到颜色的一张二维表。如01索引,表示红色。采用索引格式的RGB,红色的像素对应存储的值便是索引01.
RGB索引格式简介:
1.RGB1:
每个像素用1个bit表示,可表示的颜色范围为双色,即最传统的黑和白。1个bit只能表示0,1两种值。需要调色板,不过调色板只包含两种颜色。
2.RGB4:
每个像素用4个bit表示,4个bit所能够表示的索引范围是0-15,共16个。也就是可以表示16种颜色。即调色板中包含16中颜色。
3.RGB8:
每个像素用8个bit表示。8个bit所能够表示的索引范围是0-255,共256个。也就是可以表示256中颜色。即调色板中包含256中颜色。
目前常见的格式如下:
RGB565--------每个像素用16位表示,RGB分量分别使用5位、6位、5位
RGB555--------每个像素用16位表示,RGB分量都使用5位(剩下1位不用)
RGB24----------每个像素用24位表示,RGB分量各使用8位
RGB32----------每个像素用32位表示,RGB分量各使用8位(剩下8位不用)
ARGB32--------每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)
RGB565格式每一个像素用16个bit来表示,2个字节,1个WORD, R, G, B分别用5, 6, 5个bit来表示,格式也因此而得名。
排列顺序为:
高字节 低字节
R R R R R G G G G G G B B B B B
根据RGB565的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为short. 那么则有:
R = color & 0xF800, (获取高字节的5个bit)
G = color & 0x07E0, (获取中间6个bit)
B = color & 0x001F, (获取低字节5个bit)
RGB55, 表示一个像素用16个bit来表示,2个字节,1个WORD,但是最高位不用,R, G, B分别用5个bit来表示。
排列顺序为:
高字节 低字节
X R R R R R G G G G G B B B B B
(X代表保留)
根据RGB565的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为short. 那么则有:
R = color & 0x7C00, (获取高字节的5个bit)
G = color & 0x03E0, (获取中间5个bit)
B = color & 0x001F, (获取低字节5个bit)
RGB24, 一个像素用24个bit来表示,3个字节,R, G, B分量分别用8个bit来表示,取值范围为0-255。
(注意在内存中RGB各分量的排列顺序为:BGR BGR BGR…。)
排列顺序为:
高字节 低字节
B B B B B B B B G G G G G G G G R R R R R R R R
根据RGB24的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为int. 那么则有:
R = color & 0x000000FF,
G = color & 0x0000FF00,
B = color & 0x00FF0000,
RGB32使用32位来表示一个像素,4个字节,RGB分量各用去8位,剩下的8位用作Alpha通道或者不用。(ARGB32就是带Alpha通道的RGB24。)
注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。
排列顺序为:
高字节 低字节
B B B B B B B B G G G G G G G G R R R R R R R R X X X X X X X X
(X代表保留)
根据RGB32的存储方式,即可得到获取R,G,B分量的值。现假设计算机中存储某一个像素点的变量为color, 数据类型为int. 那么则有:
R = color & 0x0000FF00
G = color & 0x00FF0000,
B = color & 0xFF000000,