565的16位图怎么转成888的24位图

本文详细解析了如何将16位RGB16格式转换为24位RGB24格式的过程,包括具体算法步骤及实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.360doc.com/content/10/1217/18/3100954_79051451.shtml

565的16位图怎么转成888的24位图


 
比如: 
unsigned   short   rbg16   =   0xF817; 

int   r   =   ((rgb16   &   0xF800)   > >   11)   *   256   /   32; 
int   g   =   ((rgb16   &   0x07E0)   > >   5)   *   256   /   64; 
int   b   =   (rgb16   &   0x001F)   *   256   /   32; 
 
#6楼 得分:0回复于:2005-04-08 12:16:33
下面分别介绍各种RGB格式。 

¨   RGB1、RGB4、RGB8都是调色板类型的RGB格式,在描述这些媒体类型的格式细节时,通常会在BITMAPINFOHEADER数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。以RGB1(2色位图)为例,比如它的调色板中定义的两种颜色值依次为0x000000(黑色)和0xFFFFFF(白色),那么图像数据001101010111…(每个像素用1位表示)表示对应各像素的颜色为:黑黑白白黑白黑白黑白白白…。 

¨   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 

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

typedef   struct   tagRGBTRIPLE   {   
    BYTE   rgbtBlue;         //   蓝色分量 
    BYTE   rgbtGreen;       //   绿色分量 
    BYTE   rgbtRed;           //   红色分量 
}   RGBTRIPLE; 

¨   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; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值