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