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

发布于 2024-08-13 05:41:26 字数 457 浏览 8 评论 0原文

我有一个大的 8 位 PNG 图像。我正在使用 Java 将图像分割成更小的 32x32 图像。我使用 Java 的 ImageIO 将 PNG 加载到 BufferedImage 中,然后调用它的 getSubimage(x, y, 32, 32) 。然后,我使用 ImageIO 将每个图块写为 PNG 格式。

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

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

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

谢谢!

I have a large 8-bit PNG image. I am using Java to slice the image into smaller 32x32 images. I use Java's ImageIO to load the PNG into a BufferedImage and then call it's getSubimage(x, y, 32, 32). I then use ImageIO to write each tile out as a PNG.

The problem is that the resulting image has the same IndexColorModel as the original image. For example, one 32x32 tile has only 8 total colors but it includes a color model with all 100-odd colors from the original image.

I would like to remove unused colors from the 32x32 tile's IndexColorModel before I write out the PNG. There is no sense including color data for colors not used in the image and I'd like the images to be as small as possible.

Is there a built-in mechanism to do this or can someone point me to an (easy) way to modify/reduce the ColorModel?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少跟Wǒ拽 2024-08-20 05:41:26

看一下java.awt.image 中的ColorConvertOp

基本上,您创建一个具有所需深度的新 IndexColorModel。如果您确实想要最小的,您可以遍历Raster并计算颜色。否则,只需选择每像素 4 或 5 位。然后使用 TYPE_BYTE_BINARYIndexColorMap 创建一个 BufferedImage。最后,使用ColorConvertOpfilter()方法将原始数据复制到新的BufferedImage

Take a look at ColorConvertOp in java.awt.image.

Basically, you create a new IndexColorModel of the desired depth. If you really want the smallest, you can walk through the Raster and count the colors. Otherwise, just choose 4 or 5 bits per pixel. Then create a BufferedImage with TYPE_BYTE_BINARY and the IndexColorMap. Finally, use the ColorConvertOp's filter() method to copy the original data to the new BufferedImage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文