java - 重新绘制一个 argb BufferedImage

标签 java bufferedimage

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

这是抽象的 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

最佳答案

已经找到解决方案:

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

关于java - 重新绘制一个 argb BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12552755/

相关文章:

java - 将 Stringbuffer 转换为 String() 后调用 String subSequence()

java - 如何禁用 java.awt.Graphics.fillRect(int x, int y, int width, int height) 的效果?

java - Java 中不存在单一类路径问题的语言

java - 这种情况如何正确使用Getter

javascript - 在本地系统中下载文件或pdf,而不仅仅是在服务器中

java - 如何给 ImageIcon 着色

java - 为什么我的 BufferedImage 不显示在 .jar 文件中?

java - 将 CIDR 地址转换为子网掩码和网络地址

java - 使用线程在 Java 中的 BufferedImage 上绘制线条

java - 如何从 Java 中的 URL 获取图像格式?