[英]Repaint an argb BufferedImage
在我的applet中,我使用不同的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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.