免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 814 | 回复: 0
打印 上一主题 下一主题

24bit to be 16bit [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-18 16:16 |只看该作者 |倒序浏览
(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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP