當前位置:編程學習大全網 - 編程軟體 - (C語言問題)LCD驅動舍棄RGB位數的編程問題

(C語言問題)LCD驅動舍棄RGB位數的編程問題

主要是壹個位的移位轉換問題。

舉個例子:壹個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))

  • 上一篇:請幫忙翻譯成日語
  • 下一篇:學而思培優和學而思網校的區別是什麽?
  • copyright 2024編程學習大全網