java可以加载透明的图像吗?
我有一个透明的PNG图像。我使用这种格式是因为只有PNG可以支持透明度和alpha遮罩
我的目标是用这个图像绘制一个JPanel,让透明区域具有底层面板的颜色,并最终用图像制作一些动画
无论我遇到什么问题,当加载并在JPanel上绘制时,透明区域都变成了纯白
所以java不支持透明图像
class imgpanel extends JPanel{
BufferedImage image,backg;
imgpanel(){
try {
image = ImageIO.read(new File("theimage.png"));
backg = ImageIO.read(new File("backimage.png"));
} catch (IOException ex) {
System.out.println("No image found");
}
setPreferredSize(new Dimension(400,300));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(backg,0,0,null);
g.drawImage(image, 0, 0, null);
}
}
因此,我在不透明的“背景图像”上绘制透明的“背景图像”
# 1 楼答案
从我的经验来看。read通过选择错误的透明度/图像类型加载没有透明度的图像。因此,我使用一个变通方法-ImageIcon将其加载为图像,可以使用预定义的图像类型BuffereImage将其绘制到空的BuffereImage中。输入_INT_ARGB。不要忘了ImageIcon禁止垃圾收集器收集图像,如果之后没有刷新图像
# 2 楼答案
是没有问题,不要使用调色板和索引颜色
试一试,无论图像是否真的是透明的,颜色中都有一个alpha分量。 例如,使用
test.html
: