2009-12-02 46 views
1

我有一個大的8位PNG圖像。我使用Java將圖像分割成更小的32x32圖像。我使用Java的ImageIO將PNG加載到BufferedImage中,然後將其命名爲getSubimage(x, y, 32, 32)。然後,我使用ImageIO將每個拼貼寫入PNG。有沒有簡單的方法來減少IndexedColorModel中的顏色數量?

的問題是,得到的圖像具有相同的IndexColorModel作爲原始圖像。例如,一個32x32拼貼只有8種顏色,但它包含一個彩色模型,其中包含原始圖像的所有100多種顏色。

我想從刪除未使用的顏色的32×32瓦的IndexColorModel之前,我寫出來的PNG。沒有意義包括圖像中未使用的顏色的顏色數據,我希望圖像儘可能小。

是否有一個內置的機制來做到這一點,也可以有人點我一個(簡單)的方法來修改/減少ColorModel

謝謝!

回答

2

採取的java.awt.image看看ColorConvertOp

基本上,你創建所需深度的新IndexColorModel。如果你真的想要最小的,你可以走過Raster並計算顏色。否則,只需選擇每像素4或5位。然後創建一個BufferedImageTYPE_BYTE_BINARYIndexColorMap。最後,使用ColorConvertOpfilter()方法將原始數據複製到新的BufferedImage

+0

德文,感謝 - 這讓我在正確的方向前進除了使用具有顏色的確切數目創建'IndexColorModel'後,所保存的PNG似乎仍然有256色,在它的顏色表。 Photoshop正在顯示不正確的顏色表,或者調色板具有正確的8種顏色,然後用灰色陰影填充剩餘空間達256個。有任何想法嗎? –

+0

嗯,它適用於我,所以它可能是PS報告不正確。如果您在Windows上,請檢查文件屬性,「摘要」標籤,「高級」。它應該顯示「位深度」爲4. –

+0

我在創建IndexedColorModel時可能會出現位深度錯誤。它可能處於一個無效的狀態,它會在顏色表中產生陌生性。我會檢查出來並在這裏報告。 –

相關問題