RGB格式解析

RGB的几种格式和描述

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位表示一个像素,这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
是另一种16位的RGB格式,RGB分量都用5位表示(剩下的1位不用)。
使用一个字读出一个像素后,这个字的各个位意义如下:     
 高字节             低字节 
X R R R R G G       G G G B B B B B       (X表示不用,可以忽略)  
RGB24使用24位来表示一个像素,RGB分量都用8位表示,取值范围为0-255 
RGB32使用32位来表示一个像素,RGB分量各用去8位,剩下的8位不用


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通道的RGB24。)注意在内存中RGB各分量的排列顺序为:BGRA BGRA BGRA…。通常可以使用RGBQUAD数据结构来操作一个像素,它的定义为:
typedef struct tagRGBQUAD {
BYTE rgbBlue; // 蓝色分量
BYTE rgbGreen; // 绿色分量
BYTE rgbRed; // 红色分量
BYTE rgbReserved; // 保留字节(用作Alpha通道或忽略)
} RGBQUAD。



  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值