textbox

IT博客 联系 聚合 管理
  103 Posts :: 7 Stories :: 22 Comments :: 0 Trackbacks

 RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上重现16777216种颜色。
  在 RGB 模式下,每种 RGB 成分都可使用从 0(黑色)到 255(白色)的值。 例如,亮红色使用 R 值 255、G 值 0 和 B 值 0。 当所有三种成分值相等时,产生灰色阴影。 当所有成分的值均为 255 时,结果是纯白色;当该值为 0 时,结果是纯黑色

         对一种颜色进行编码的方法统称为“颜色空间”或“色域”。 用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每 种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,R GB是最常见的一种方案。但是,它缺乏与早期黑白显示系统的良好兼容性。因此,件多电子电器厂商普遍采用的做法是,将RGB转换成YUV 颜色空同,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。    由于网页(WEB)是基于计算机浏览器开发的媒体,所以颜色以光学颜色RGB(红、绿、蓝)为主。 网页颜色是以16进制代码表示,一般格式为#DEFABC (字母范围从A-F,数字从0-9 );如黑色,在网页代码中便是:#000000(在css编写中可简写为#000)。当颜色代码为#AABB11时,可以简写为#AB1表示,如#135与#113355表示同样的颜色。

格式简介

   RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟 着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。以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 G G G G G B B B B B (X表示不用,可以忽略)可以组合使用屏蔽字和移位操作来得到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;

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。
posted on 2010-07-26 17:14 零度 阅读(501) 评论(0)  编辑 收藏 引用 所属分类: 验证码
只有注册用户登录后才能发表评论。