- 论坛徽章:
- 0
|
(C语言问题)LCD驱动舍弃RGB位数的编程问题
![]()
悬赏分:10 - 解决时间:2006-10-24 11:19
因为RGB的有效位数都不足一个字节(8位),那我们只能忍痛割爱了,舍弃掉低位数据,代码如下:
r = R & 0xF8;
g = G & 0xFC;
b = B & 0xF8;
high = r | (g>3);//????
color= (high
提问者:
powerload
-
助理 二级
![]()
最佳答案
主要是一个位的移位转换问题。
举个例子:一个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) = 01010000 | (01100000>>5) = 01010000 | 00000011 = 01010011
low = (g>3) = (01100000>3) = 0000000 | 0001110 = 00001110
所有把低位和高位合起来就是color=(high > 5) | (((c) & 0xf80000) >> 19))
回答者:
DesireFish
-
助理 二级
10-24 09:16
提问者对于答案的评价:
谢谢了 也谢谢其他回答问题的人
评价已经被关闭
目前有 0 个人评价
好
50% (0)
不好
50% (0)
其他回答
共 1 条
high的推算有错. 好象应该 high = r | (g>>5);(以下=右的abcd..x表示0/1)
r = R & 0xF8; //设r=abcdefgh, 则r=abcde000;
g = G & 0xFC; //设g=ijklmnop, 则g=ijklmn00;
b = B & 0xF8; //设b=qrstuvwx, 则b=qrstu000;
high = r | (g>>5); //g右移5位(00000ijk),或r. 这样, high=abcdeijk.
low = (g>3);//g左移3位(lmn00000),或b右移3位(000qrstu). 这样, low=lmnqrstu.
color= (high
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22754/showart_234165.html |
|