我有一个大的8位PNG图像。我使用Java将图像切割成较小的32x32图像。我使用Java的ImageIO
将PNG加载到BufferedImage
中,然后将其称为getSubimage(x, y, 32, 32)
。然后我使用ImageIO
将每个图块写为PNG。
问题是生成的图像与原始图像具有相同的IndexColorModel
。例如,一个32x32磁贴只有8种颜色,但它包含一个颜色模型,其中包含原始图像中的所有100种颜色。
我想在写出PNG之前从32x32磁贴的IndexColorModel
中删除未使用的颜色。没有任何意义,包括图像中未使用的颜色的颜色数据,我希望图像尽可能小。
是否有内置机制来执行此操作,或者有人指出我(简单)修改/减少ColorModel
的方式?
谢谢!
答案 0 :(得分:2)
查看java.awt.image中的ColorConvertOp
。
基本上,您创建所需深度的新IndexColorModel
。如果你真的想要最小的,你可以浏览Raster
并计算颜色。否则,只需选择每像素4或5位。然后使用BufferedImage
和TYPE_BYTE_BINARY
创建IndexColorMap
。最后,使用ColorConvertOp
的{{1}}方法将原始数据复制到新的filter()
。