有一种简单的方法可以减少IndexColorModel中的颜色数量吗?

时间:2009-12-02 22:10:12

标签: java image-processing png javax.imageio

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

查看java.awt.image中的ColorConvertOp

基本上,您创建所需深度的新IndexColorModel。如果你真的想要最小的,你可以浏览Raster并计算颜色。否则,只需选择每像素4或5位。然后使用BufferedImageTYPE_BYTE_BINARY创建IndexColorMap。最后,使用ColorConvertOp的{​​{1}}方法将原始数据复制到新的filter()