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