【发布时间】:2015-01-11 04:14:10
【问题描述】:
我正在使用以下代码读取 PNG 图像:
BufferedImage img = ImageIO.read(new URL(url));
显示后有黑色背景,据我所知是PNG透明造成的。
我找到了解决这个问题的方法,建议使用BufferedImage.TYPE_INT_RGB,但是我不确定如何将它应用到我上面的代码中。
【问题讨论】:
标签: java png bufferedimage
我正在使用以下代码读取 PNG 图像:
BufferedImage img = ImageIO.read(new URL(url));
显示后有黑色背景,据我所知是PNG透明造成的。
我找到了解决这个问题的方法,建议使用BufferedImage.TYPE_INT_RGB,但是我不确定如何将它应用到我上面的代码中。
【问题讨论】:
标签: java png bufferedimage
创建第二个BufferedImage,类型为TYPE_INT_RGB...
BufferedImage copy = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB);
将原件涂到副本上...
Graphics2D g2d = copy.createGraphics();
g2d.setColor(Color.WHITE); // Or what ever fill color you want...
g2d.fillRect(0, 0, copy.getWidth(), copy.getHeight());
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
您现在有一个非透明版本的图像...
要保存图片,请查看Writing/Saving an Image
【讨论】:
g2d.drawImage(img, 0, 0, copy.getWidth(), copy.getHeight(), null);
copy ,因此您为fillRect 选择的任何背景颜色都将在任何不完全不透明的像素上部分可见。是否有一种标准方法可以完全忽略 alpha 混合,并假设所有源像素完全不透明?