OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4333|回复: 13

RGB值得问题

[复制链接]

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
发表于 2016-9-30 15:00:03 | 显示全部楼层 |阅读模式
1金钱
在原子的lcd显示程序中 颜色值用4位16进制表示 ,而网上好多RGB颜色对照表都是6位16进制表示。我想知道他们之间是怎么转换的????谢谢各位大神了!!!

最佳答案

查看完整内容[请看2#楼]

因为屏幕只支持16位色深,所以用两个字节就可以满足要求。网上给出的可能是24位色深或是32位色深。 转换方法看这个帖子 http://blog.sina.com.cn/s/blog_5f2c831b01015swm.html
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-9-30 15:00:04 | 显示全部楼层
muk子夜 发表于 2016-9-30 15:56
//画笔颜色
#define WHITE                  0xFFFF
#define BLACK                  0x0000          

因为屏幕只支持16位色深,所以用两个字节就可以满足要求。网上给出的可能是24位色深或是32位色深。
转换方法看这个帖子
http://blog.sina.com.cn/s/blog_5f2c831b01015swm.html
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
发表于 2016-9-30 15:11:20 | 显示全部楼层
4位十六进制用16根IO口,容易统一一个GPIO口操作控制,分析颜色数值就会知道,每个颜色可以舍弃一位尾端的数值,只取高位数值TFT彩屏本身颜色就不很精确,主要功能也不是用来显示风景图片什么的,这样会损失一张图片的色阶过渡,但是不会影响文字界面的风格,使用方便。
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 15:16:41 | 显示全部楼层
ba5rw 发表于 2016-9-30 15:11
4位十六进制用16根IO口,容易统一一个GPIO口操作控制,分析颜色数值就会知道,每个颜色可以舍弃一位尾端的 ...

具体是怎么操作的把6位16进制转换成4位16进制??
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
发表于 2016-9-30 15:28:25 | 显示全部楼层
muk子夜 发表于 2016-9-30 15:16
具体是怎么操作的把6位16进制转换成4位16进制??

减少三原色的数值位数即可。
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 15:30:26 | 显示全部楼层
没人知道怎么搞得吗???请大神指点,谢谢各位了
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 15:31:43 | 显示全部楼层
ba5rw 发表于 2016-9-30 15:28
减少三原色的数值位数即可。

能举个例子说明吗,谢谢了
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
发表于 2016-9-30 15:40:49 | 显示全部楼层
muk子夜 发表于 2016-9-30 15:31
能举个例子说明吗,谢谢了

你先举个疑惑的例子,比如原子的4位是怎么样的4位,网上的6位又是怎样的?你的4位十六进制我有点糊涂了……是不是指驱动口线是16根呢?而网上是24根?
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 15:56:10 | 显示全部楼层
ba5rw 发表于 2016-9-30 15:40
你先举个疑惑的例子,比如原子的4位是怎么样的4位,网上的6位又是怎样的?你的4位十六进制我有点糊涂了… ...

//画笔颜色
#define WHITE                  0xFFFF
#define BLACK                  0x0000          
#define BLUE                  0x001F    //00000 0000000 111111
#define BRED             0XF81F
#define GRED                          0XFFE0
#define GBLUE                         0X07FF
#define RED                    0xF800
#define MAGENTA                0xF81F
#define GREEN                  0x07E0
#define CYAN                   0x7FFF
#define YELLOW                 0xFFE0
#define BROWN                          0XBC40 //棕色
#define BRRED                          0XFC07 //棕红色
#define GRAY                          0X8430//灰色
这是原子个程序中的颜色表示值

黑色        0         0        0        #000000
象牙黑        41        36        33        #292421
灰色        192        192        192        #C0C0C0
冷灰        128        138        135        #808A87
石板灰        112        128        105        #708069
暖灰色        128        128        105        #808069
                               
白色        225        225        225        #FFFFFF
古董白        250        235        215        #FAEBD7
天蓝色        240        255        255        #F0FFFF
白烟        245        245        245        #F5F5F5
白杏仁        255        235        205        #FFFFCD

这是网上的颜色为标示值
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 15:58:05 | 显示全部楼层
muk子夜 发表于 2016-9-30 15:56
//画笔颜色
#define WHITE                  0xFFFF
#define BLACK                  0x0000          

网上的这种是用6位16进制数表示,而原子哥的是4位16进制数表示,他们之间该怎么转换呢?
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2016-9-30 16:06:48 | 显示全部楼层
muk子夜 发表于 2016-9-30 15:58
网上的这种是用6位16进制数表示,而原子哥的是4位16进制数表示,他们之间该怎么转换呢?

你的表述方式有点怪,一般电子产品上说色深都是以二进制位数来表示
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 16:19:12 | 显示全部楼层
ricefat 发表于 2016-9-30 16:06
你的表述方式有点怪,一般电子产品上说色深都是以二进制位数来表示

谢谢了
回复

使用道具 举报

16

主题

197

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
457
金钱
457
注册时间
2012-4-20
在线时间
91 小时
发表于 2016-9-30 16:27:42 | 显示全部楼层
muk子夜 发表于 2016-9-30 15:58
网上的这种是用6位16进制数表示,而原子哥的是4位16进制数表示,他们之间该怎么转换呢?

原子这里已经给出解决方案,例如我拷贝你上面例子一行#define BLUE                  0x001F    //00000 0000000 111111

这里,注释后面的头5位是表示红色,中间7位表示绿色,最后6位表示蓝色。一共需要18位二进制,每4位二进制转换成一个十六进制的话就要5位十六进制数了,原子则舍去了两位二进制,估计是5位红色,6位绿色,5位蓝色。

网上的就更明白了,分别用一个字节8位二进制表示对应颜色,三原色供需6位十六进制如何转化呢?你只要把红色的八位二进制后面3位去掉,绿色去掉2位,蓝色去掉3位即可。例如象牙黑原先是0x292421对应bin00101001 00100100 00100001按上述切除方法变成00101 001001 00100对应hex就是0x2924了。这样就从六位变成8位,误差并不大,最多损失8跟255比较只有3%的误差,将就用却节省了海量的硬件资源。
回复

使用道具 举报

17

主题

132

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-9-27
在线时间
53 小时
 楼主| 发表于 2016-9-30 16:43:53 | 显示全部楼层
ba5rw 发表于 2016-9-30 16:27
原子这里已经给出解决方案,例如我拷贝你上面例子一行#define BLUE                  0x001F    //00000  ...

谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 21:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表