分享

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

 ylw527 2010-12-17
比如:
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;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多