舉個例子:壹個24位顏色RGB(0x50,0x60,0x70)轉換為565的16位:
r = R & 0xF8 = (01010000 & 11111000) = 01010000(前5位有效)
g = G & 0xFC = (01100000 & 11111100) = 01100000(前6位有效)
b = B & 0xF8 = (01110000 & 11111000) = 01110000(前5位有效)
color是16位的short int類型,高8位由r的5位和g的前3位組合而成。
high就可以寫成這樣:high = r | (g<<5)?應該是high = r | (g>>5)吧
high = r | (g>>5) = 01010000 | (01100000>>5) = 01010000 | 00000011 = 01010011
low = (g<<3) | (b>>3) = (01100000<<3) | (01110000>>3) = 0000000 | 0001110 = 00001110
所有把低位和高位合起來就是color=(high << 8) | low=(00000000 01010011<<8) | (00000000 00001110) = (01010011 000000000)|(00000000 00001110) = 01010011 00001110 = 01010 011000 01110(565) (這個結果就是取r的前5位,g的前6位,b的前5位)
在microwindow中888向565轉換的宏定義如下:更好理解壹些
/* create 16 bit 5/6/5 format pixel from RGB colorval (0x00BBGGRR)*/*///c是壹個unsigned long型值,0x00BBGGRR
/* In this format, alpha is ignored. #define COLOR2PIXEL565(c) \
((((c) & 0xf8) << 8) | (((c) & 0xfc00) >> 5) | (((c) & 0xf80000) >> 19))