清晰的图像与透明背景在java中

时间:2013-05-01 14:40:42

标签: java graphics2d

我在paintComponent(Graphics g)方法中绘制图像,以使它们与Retina显示兼容

g.drawImage(image, 0, 0, imageWidth/2, imageHeight/2, null);

一切都很完美,但图像的阴影相互叠加。它使图片变得丑陋。 因此我需要在绘制新图像之前清除图像。问题出现了:

清除图像没有问题,但问题是要防止父元素的背景重叠。现在它看起来像http://cl.ly/image/0K1u0q2M150W

我使用了其他主题的方法:

g2d.setBackground(new Color(255,255,255,0));
g2d.clearRect(0, 0, ICON_WIDTH, ICON_HEIGHT);

以及

g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR));
g2d.setBackground(new Color(255,255,255,0));
g2d.clearRect(0, 0, ICON_WIDTH, ICON_HEIGHT);
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));

和其他几个人。

它应该是这样的http://cl.ly/image/2V1R1v0X452N 这就是它多次调用repaint()方法后的样子。我需要调用它来将图像从一个更改为另一个。

我的paintComponent方法:

Image image;
if (flag) {
    image = image1;
} else {
    image = image2;
}

g2d.drawImage(image, 0, 0, IMAGE_SIZE, IMAGE_SIZE, null);

1 个答案:

答案 0 :(得分:6)

在写这个问题时,我偶然发现了答案。 我来电话

        super.paintComponent(g);

在paintComponnent()方法的开头是解决方案。因为它清除了里面某处的图像。

清除图像的super.paintComponent(g)中的代码如下:

g.setColor(c.getBackground());
g.fillRect(0, 0, c.getWidth(),c.getHeight());

如果我把它代替super.paintComponent - 它也可以。我只需要在填充矩形之前不要设置自己的颜色。