RGB565->RGB888

简介:

 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
  
下面就以实例来说明问题:

 

 
  1. void RGB565_to_RGB24(unsigned char *source,unsigned char *convert,int width)  
  2. {  
  3.     int i;  
  4.     for (i=0 ;i<width ;i++)  
  5.     {  
  6.         * convert++  =  (*source)<<3; /* B */ 
  7.         * convert++  =  (*(source+1) & 0x07)<<5 | (*source & 0xe0)>>3; /* G */ 
  8.         * convert++  =  *(source+1); /* R */ 
  9.           source    +=2;  
  10.     }  
也可用下面这种方法实现转换,其道理是一样的:
 
  1. void RGB16toRGB24(unsigned char *rgb24,unsigned char *rgb16)  
  2. {  
  3.     int i,j;  
  4.     unsigned short *dot;  
  5.     for(i = 0; i < v_info.xres; i++)  
  6.     {  
  7.         for(j = 0; j < v_info.yres; j++)  
  8.         {  
  9.             dot = (unsigned short *)(rgb16 + i * v_info.yres + j);  
  10.             *rgb24 = (((*dot)&0x01F) << 3);   //R  
  11.             rgb24++;  
  12.             *rgb24 = (((*dot)&0x03E0) >> 2);  //G  
  13.             rgb24++;      
  14.             *rgb24 = (((*dot)&0x7C00) >> 7);  //B  
  15.             rgb24++;          
  16.         }  
  17.     }  

 

     本文转自 驿落黄昏 51CTO博客,原文链接:http://blog.51cto.com/yiluohuanghun/860523,如需转载请自行联系原作者


相关文章
|
6月前
|
存储 计算机视觉 Python
BGR与RGB
BGR与RGB
1694 1
|
8天前
|
存储 编解码 监控
RGB 和 YUV 区别
【10月更文挑战第26天】RGB和YUV在色彩表示原理、数据存储方式、应用场景以及转换关系等方面都存在着明显的区别,它们各自在不同的领域发挥着重要的作用。
|
6月前
GRAY色彩空间
【5月更文挑战第13天】GRAY色彩空间。
45 1
|
6月前
|
计算机视觉
RGB色彩空间
【5月更文挑战第11天】RGB色彩空间。
53 3
YUV 与 RGB的转换
RGB 转换成 YUV Y = (0.257 * R) + (0.504 * G) + (0.
5442 0
|
编解码
理解 RGB & YUV 颜色编码
理解 RGB & YUV 颜色编码
477 0
理解 RGB & YUV 颜色编码
|
C#
c# 颜色RGB到HSB互相转换
原文:c# 颜色RGB到HSB互相转换 1 /// 2 /// 色相,饱和度,亮度转换成rgb值 3 /// 4 /// 5 public static float[] HSB2RGB(float[...
2034 0