随笔-4  评论-40  文章-117  trackbacks-0


 

准备一个长度为4096的数组,代表4096种颜色。对图中的每一个象素,取R、G、B的最高四位,拼成一个12位的整数,对应的数组元素加1。全部统计完后,就得到了这4096种颜色的使用频率。其中,可能有一些颜色一次也没用到,即对应的数组元素为零(假设不为零的数组元素共有PalCounts个)。将这些为零的数组元素清除出去,使得前PalCounts个元素都不为零。将这PalCounts个数按从大到小的顺序排列(这里我们使用起泡排序)。这样,前256种颜色就是用的最多的颜色,它们将作为调色板上的256种颜色。对于剩下的PalCounts-256种颜色并不是简单地丢弃,而是用前256种颜色中的一种来代替,代替的原则是找有最小平方误差的那个。再次对图中的每一个象素,取R、G、B的最高四位,拼成一个12位的整数,如果对应值在前256种颜色中,则直接将该索引值填入位图数据中,如果是在后PalCounts-256种颜色中,则用代替色的索引值填入位图数据中。


不错。
给点建议。

1。再次对图中的每一个象素,取R、G、B的最高四位,拼成一个12位的整数,如果对应值在前256种颜色中,则直接将该索引值填入位图数据中,如果是在后PalCounts-256种颜色中,则用代替色的索引值填入位图数据中。
这里的误差很大。丢掉的数据会对效果又明显的影响。

2。准备一个长度为4096的数组,代表4096种颜色。对图中的每一个象素,取R、G、B的最高四位。
每个4位好像太少了。多了表格又太大。能不能过滤一下看看颜色数有多少。

3。将这PalCounts个数按从大到小的顺序排列(这里我们使用起泡排序)。
用个好点的排序把,对能力有帮助。

4。这样,前256种颜色就是用的最多的颜色,它们将作为调色板上的256种颜色。对于剩下的PalCounts-256种颜色并不是简单地丢弃,而是用前256种颜色中的一种来代替
好方法,对速度帮助确实很大。

其实1,2导致了效果不会很好,除非你希望这样的效果。特别是第一点。如果你希望看起来类似原图,需要将1的损失拿回来。也就是RGB的变化量用到下一个像素中去。这样损失就小了,不过下一个像素的选择方法不好会导致偏移,自己设计一个把。对了你的hash表因为这样就个废了,想法建另外一个。这样的改法没有考虑2的影响,就是说当主的基色还是不准。不过这个你可以再尝试其他的办法

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qqwwing/archive/2007/04/26/1586018.aspx

posted on 2009-10-30 17:40 李阳 阅读(519) 评论(0)  编辑 收藏 引用 所属分类: 图形图像

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理