当前位置:首页 >> 编程开发 >> Visual C++ >> 内容

RGB565与RGB888的转换

时间:2013/5/27 作者:平凡之路 来源:xuhantao.com 浏览:

RGB565的颜色格式RGB555色彩格式是相同的,除了6位是绿色的价值,

而不是5。因此,所有16位 都在使用。该组织在图像缓冲区的像素是从左至右的权

利,自下而上。

RGB565格式说明:

RGB565彩色模式, 一个像素占两个字节, 其中:第一个字节的前5位用

来表示R(Red),第一个字 节的后三位+第二个字节的前三位用来表示G(Green),

第二个字节的后5位用来表示B(Blue)。

如 :15 14 13 12 11 10 9 8 , 7 6 5 4 3 2 1 0

[RGB565]

0x00??+1 RRRRRGGG

0x00??+0 GGGBBBBB

R 5   0xf8    

G 6   0xe0 0x07

B 5   0x1f

[RGB24]

R G B

addr:1 2 3

对于RGB888来说,每个像素由3个字节组成,R->8bit,G- >8bit,B->8bit;

RGB565 的每个pixels是由2字节组成,R->5bit,G->6bit,B- >5bit。转换的思

路是取出原图的点,对每个采样进行运算。

RGB565

STEP1(第二个 字节) R 取得前5bit  & 0xf8

G 取得后3bit  & 0xe0 并右移5bit 并入R;

STEP2(第一个字节) 取得第4-6bit & 0x1c 并左移3bit 并入B

B 取得前5bit  & 0xf8 并右移3bit 与G中间3位合并

R4  R3  R2  R1  R0  G5  G4  G3 | G2  G1  G0  B4  B3  B2  B1  B0

 A[] 15  14  13  12  11  10   9   8 |  7   6   5   4   3   2   1   0

下面就以实例来说明问 题:

void RGB565_to_RGB24(unsigned char *source,unsigned char *convert,int width)   

  
{     
    int i;     
    for (i=0 ;i<width ;i++)     
    {     
        * convert++  =  (*source)<<3; /* B */
        * convert++  =  (*(source+1) & 0x07)<<5 | (*source & 0xe0)>>3; 

/* G */
        * convert++  =  *(source+1); /* R */
          source    +=2;     
    }     
}

也可用下面这种方法实现转换,其道理是一样的:

void RGB16toRGB24(unsigned 

char *rgb24,unsigned char *rgb16)     
{     
    int i,j;     
    unsigned short *dot;     
    for(i = 0; i < v_info.xres; i++)     
    {     
        for(j = 0; j < v_info.yres; j++)     
        {     
            dot = (unsigned short *)(rgb16 + i * v_info.yres + j);     
            *rgb24 = (((*dot)&0x01F) << 3);   //R     
            rgb24++;     
            *rgb24 = (((*dot)&0x03E0) >> 2);  //G     
            rgb24++;         
            *rgb24 = (((*dot)&0x7C00) >> 7);  //B     
            rgb24++;             
        }     
    }     
}

本文出自 “驿落黄昏” 博客,请务必保留此出处 http://yiluohuanghun.blog.51cto.com/3407300/860523

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1