在我的小程序中,我使用了不同的 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/