準備一個長度為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
李陽 閱讀(748)
評論(0) 編輯 收藏 引用 所屬分類:
圖形圖像