16位怎么转化成24位?

xiaofk 2003-07-24 10:52:21
我有一些16位的图像的数据,(是数据而不是图像文件),16位是 R(5) G(6) B(5),
怎么转化成24位 R(8) G(8) B(8) ?
...全文
219 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2003-08-02
  • 打赏
  • 举报
回复
如果需要好的效果最好还是做线性变换
对于R(5)和B(5)他们的表达范围是 0 到31 把他们等比放大到0到255
R' = (int) (0.5+R * 255.0/31.0)
B' = (int) (0.5+B * 255.0/31.0)

对于G(6)它的表达范围是0到63,也要等比放大到0到255
G'=(int) (0.5 + G* 255.0/63.0)
这样可以保证做到原来的纯黑还是纯白都可以有效的保留。只不过是浮点运算速度慢一些。
移位操作和简单的整数计算虽然速度快,但是方式无法保证这点。

duwenyong 2003-08-02
  • 打赏
  • 举报
回复
R(5)<<3
G(6)<<2
B(5)<<3
不就是RGB24了,还有,RGB24要倒着存,即每个像素按BGR顺序存的。
BadEnglish 2003-07-24
  • 打赏
  • 举报
回复
低位放0不就好了?
要效果更好就加抖动(dithering)
BlueSky2008 2003-07-24
  • 打赏
  • 举报
回复
低位放0不就好了?
要效果更好应该是插值把。要减少数据位才用抖动呢。
HUNTON 2003-07-24
  • 打赏
  • 举报
回复
写错了,应该是这个:
R(16) G(16) B(16) 代表16位下的RGB值,其中R(16)和B(16)为5位(0---31),G(16)为6位(0---63)
R(24) G(24) B(24) 代表24位下的RGB值
R(24) = (R(16) + 1) * 8 - 1;
G(24) = (G(16) + 1) * 4 - 1;
B(24) = (B(16) + 1) * 8 - 1;
HUNTON 2003-07-24
  • 打赏
  • 举报
回复
用这个转化不止是否可以:
R(8) = (R(5) + 1) * 4 / 3 - 1;
G(8) = (G(5) + 1) * 4 / 3 - 1;
B(8) = (B(5) + 1) * 4 / 3 - 1;

4,446

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧