我有一个透明的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);
}
}
因此,我将透明的“图像”画到不透明的“背景图像”上
根据我的经验ImageIO. read通过选择错误的透明度/图像类型加载没有透明度的图像。因此,我使用一个解决方案-ImageIcon将其加载为图像,可以将其绘制为空的BufferedImage,并使用预定义的图像类型BufferedImage。TYPE_INT_ARGB。不要忘记ImageIcon禁止垃圾收集器收集图像,如果图像之后没有刷新。
ImageIcon imageIcon = new ImageIcon(imageAbsolutePath);
Image tmpImage = imageIcon.getImage();
BufferedImage image = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
image.getGraphics().drawImage(tmpImage, 0, 0, null);
tmpImage.flush();
return image;
是无问题,请勿使用调色板、索引颜色。
试试看,图像是否真的是透明的,在颜色上有一个alpha成分。例如用test.html
:
<html>
<body>
<div style="background: url(backimage.png)"><img src="theimage.png"></div>
</body>
</html>
基本上我的问题分为两部分。 > 我想知道将要操纵像素并将特定颜色转换为透明像素的首选/快速方法。 我想知道我是否能够使用这个“BuffereImage”,而不必将其保存为支持“png”等透明度的文件格式 我找到了一种设置单个像素的方法 这儿呢 正如它所提到的,这是一种“缓慢的方法” 我发现这个线程Java:用透明像素填充BufferedImage 哪一条评论提到了“int[]”和操纵像素。 本质上
问题内容: 所以我有两个图像,我想显示在彼此的顶部。这个 上面的图像应该是透明的,这样底部的图像是透明的 可见。 Here is my code so far: With the face in the bottom and the eyes on top. 问题答案: Try this 我没有你的两个源图像,所以我不能确定它将与工作 他们。如有任何问题,请提供两者的原件。
问题内容: 我正在使用以下代码在Windows和Linux中设置任务栏图标。它在Windows中效果很好,在Linux中效果很好。在Linux(Ubuntu)中,我将面板设置为(某种程度上)透明,并且当我添加GIF(具有透明背景)时,图标的背景显示为灰色和丑陋的所有颜色(参见图像,绿色菱形“!”)。 …有关如何制作GIF图片的任何想法,我要“保留”其透明背景? 替代文字http://unarm.o
问题内容: 假设我有 我想提出一个并给它一个的-但我想,我写的文字将有充分的不透明度()。 如果我这样写CSS 一切 都会变得不透明-我不想要那样。 所以我的问题是–如何获得带有完全不透明度文本的低不透明度背景图像? 问题答案: 不,这无法完成,因为会影响整个元素(包括其内容),并且无法更改此行为。您可以使用以下两种方法解决此问题。 Secondary div 将另一个元素添加到容器中以保留背景。
#klem1,#klem2 { opacity:0.4; filter:alpha(opacity=40); /* For IE8 and earlier */ } #klem1:hover,#klem2:hover { opacity:1.0; filter:alpha(opacity=100); /* For IE8 and earlier */ } div.background { widt
问题内容: 我将签名图像另存为.jpg图片。我使用graphic2d在图像上绘制签名的每个像素(使用签名板获得),它可以正常工作,但我总是得到白色背景。如果我想将签名放在PDF文档上,jpg图像的白色正方形的边框会覆盖PDF的某些单词。 我想要得到的是保存带有透明背景的jpg图像,因此当我将其放置在PDF上时,没有单词被白色图像背景覆盖,只有签名行。 这是保存缓冲图像的代码。它具有白色背景。 我试