【发布时间】:2012-01-24 06:43:52
【问题描述】:
我有一个具有 alpha 透明度的 BufferedImage,我需要将其保存为具有索引透明度的 GIF。没有半透明像素,因此应该可以进行转换。
使用http://gman.eichberger.de/2007/07/transparent-gifs-in-java.html 下的代码,我定义了一种透明颜色(例如绿色,它不是当前图像的一部分)并使其透明。效果很好,但它混淆了颜色表,所有颜色看起来都很糟糕(尽管我只使用了 3 种不同的颜色)。
有没有办法调整这个或另一种将这种 ARGB 图像转换为索引图像而不会显着质量损失的方法?
我的图像的构建方式:
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D graphics = (Graphics2D)image.getGraphics();
graphics.setColor(backgroundColor);
graphics.fillRect(0, 0, width, height);
// Some more painting here
graphics.dispose();
感谢您的帮助!
【问题讨论】:
-
从 (A)RGB 到索引的颜色转换并非易事,如果您知道您只会使用 3 种颜色,您应该首先将图像创建为索引。如果您需要转换,您应该查看图像库(或自己实现错误扩散之类的算法,但这不是很聪明)。
-
感谢您的回答!好吧,问题是我还需要从相同的图形中保存一个 PNG(具有 alpha 透明度),我不想渲染它两次(太贵了)。
标签: java transparency gif bufferedimage javax.imageio