请教:在16bit色深下如何显示256色位图失真最小?

zsx0521 2004-05-05 09:43:59
16bit为565格式时,我这样转换:
pal为256色位图中的调色板信息(RGBQUAD格式)
DWORD blue = pal[i].rgbBlue >> 3;
DWORD green = pal[i].rgbGreen>> 2;
DWORD red = pal[i].rgbRed >> 3;
colorValue[i] = (blue&0x1F) + ((green&0x3F)<<5) + ((red&0x1F)<<11);
显示好像色彩失真很大。

如果取各颜色最大值,再进行归一化,好像也是失真很大。
有没有简单的方法,可以使得失真最小啊?
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsx0521 2004-05-08
  • 打赏
  • 举报
回复
你这样是直接截去了色彩的主要信息。是否误差会更大?
quace 2004-05-08
  • 打赏
  • 举报
回复
程序错了
DWORD blue = pal[i].rgbBlue;
DWORD green = pal[i].rgbGreen;
DWORD red = pal[i].rgbRed;
colorValue[i] = (blue&0x1F) + ((green&0x3F)<<5) + ((red&0x1F)<<11);
Swallowdeng_cq 2004-05-08
  • 打赏
  • 举报
回复
袁大侠说得对,错误无法避免因为数据已经损失了,不过how distribute the errors to neighbouring pixels
lambochan 2004-05-06
  • 打赏
  • 举报
回复
没办法..你这样直接右移转换就是砍尾...
唯一补救的方法是使用误差扩散..
按一定系数把“尾”分红、绿、蓝三通道扩散到右、下等相邻像素.

zsx0521 2004-05-06
  • 打赏
  • 举报
回复
我就是想找一个算法来解决这个问题啊!
FengYuanMSFT 2004-05-06
  • 打赏
  • 举报
回复
You can't avoid the error. Just use error diffusion algorithm to distribute the errors to neighbouring pixels.
zsx0521 2004-05-06
  • 打赏
  • 举报
回复
你的思路是不是平滑处理?
我看了WINDOWS本身在16bit色深下处理256色位图,色彩完全没有问题的。
lambochan 2004-05-05
  • 打赏
  • 举报
回复
为何要这样转换?use SetPixel()?
用LoadImage()不行么?
简单得很哦~~kaka

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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