4

在我的小程序中,我使用了不同BufferedImage的 s 并将它们用作屏幕部件。每个屏幕部分只有在内容需要更改时才会重新绘制。

这是抽象ScreenPart类:

public abstract class ScreenPart extends BufferedImage{
    Graphics2D g;

    private BufferedImage buffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB);

    public ScreenPart(int width, int height) {
        super(width, height, BufferedImage.TYPE_INT_ARGB);
        g = createGraphics();
        repaint();
    }

    public abstract void paint(Graphics2D g);

    public void repaint(){
        g.drawImage(buffer, 0, 0, null);
        paint(g);
    }
}

但是缓冲区不起作用,因为缓冲区也是透明的。当我将BufferedImage缓冲区的类型从 ARGB 更改为 RGB 时它会起作用,但这也会显示黑色背景。所以我的问题是:我怎样才能正确地BufferedImage用缓冲区重新绘制它?

4

1 回答 1

0

已经找到解决方案:

public void repaint() {
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR));
    g.fillRect(0,0, getWidth(), getHeight());
    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
    paint(g);
}

这不使用另一个BufferedImage.

于 2012-09-23T14:24:14.490 回答