1

我有一个大的 8 位 PNG 图像。我正在使用 Java 将图像切成更小的 32x32 图像。我使用 JavaImageIO将 PNG 加载到 a 中BufferedImage,然后将其称为getSubimage(x, y, 32, 32). 然后,我使用ImageIO将每个图块写为 PNG。

问题是生成的图像IndexColorModel与原始图像相同。例如,一个 32x32 的图块总共只有 8 种颜色,但它包含一个颜色模型,其中包含来自原始图像的所有 100 多种颜色。

IndexColorModel在我写出 PNG 之前,我想从 32x32 瓷砖中删除未使用的颜色。包含图像中未使用的颜色的颜色数据是没有意义的,我希望图像尽可能小。

是否有内置机制来执行此操作,或者有人可以指出我的(简单)方法来修改/减少ColorModel

谢谢!

4

1 回答 1

2

ColorConvertOp在 java.awt.image 中看看。

基本上,您创建一个新IndexColorModel的所需深度。如果你真的想要最小的,你可以走过Raster并计算颜色。否则,只需选择每像素 4 或 5 位。然后创建一个BufferedImagewithTYPE_BYTE_BINARYIndexColorMap. 最后,使用ColorConvertOp'filter()方法将原始数据复制到新的BufferedImage.

于 2009-12-03T22:09:37.023 回答