1

大きな8ビットのPNG画像があります。私はJavaを使用して、画像を32x32の小さな画像にスライスしています。私はJavaを使用ImageIOしてPNGをにロードしてBufferedImageからそれをと呼びますgetSubimage(x, y, 32, 32)。次に、ImageIO各タイルをPNGとして書き出すために使用します。

問題は、結果の画像がIndexColorModel元の画像と同じになることです。たとえば、1つの32x32タイルには合計8色しかありませんが、元の画像の100色すべてのカラーモデルが含まれています。

IndexColorModelPNGを書き出す前に、32x32タイルから未使用の色を削除したいと思います。画像に使用されていない色のカラーデータを含めても意味がないので、できるだけ小さくしたいと思います。

これを行うための組み込みのメカニズムはありますか、または誰かが私に変更/削減する(簡単な)方法を教えてもらえColorModelますか?

ありがとう!

4

1 に答える 1

2

ColorConvertOpjava.awt.imageを見てください。

IndexColorModel基本的に、希望する深さの新しいものを作成します。本当に最小にしたい場合は、 を通り抜けてRaster色を数えることができます。それ以外の場合は、1 ピクセルあたり 4 または 5 ビットを選択します。次に、 と を作成BufferedImageTYPE_BYTE_BINARYますIndexColorMap。最後に、ColorConvertOpfilter()メソッドを使用して元のデータを新しい にコピーしますBufferedImage

于 2009-12-03T22:09:37.023 に答える