绘画BufferedImage性能

时间:2015-05-11 16:35:30

标签: java multithreading performance swing paintcomponent

我有一个Java应用程序,它有一些JPanels,每个都执行大量的绘画,而且我的很多的性能问题。我使用以下技术试图不会遭受太多痛苦,只是当Panel上的某些东西发生了变化而不是在主窗口调用重绘时进行的操作时,只将JPanels内容绘制到BufferedImage。当每个面板中的一些内容发生变化时,应用程序变慢,动画变得非常紧张。

我只检查了CPU和它的5%,但是当有一些更新时,更新显得非常紧张。是否有可能影响这一点的东西,我只会在CPU受到压力时才会出现紧张的问题。

public class myClass extends JPanel {
private BufferedImage bImage;


private void updateImage() {
    BufferedImage temp= new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB);
    Graphics g = temp.getGraphics();
    Graphics2D g2 = (Graphics2D) g;

    //Do lots and lots of drawing on g with other bufferedImages and lines and text etc

    synchronized (bImage) {
        bImage = temp;
    }
}

public void paintComponent(Graphics g) {
    synchronized (bImage) {
        g.drawImage(bImage, 0, 0, this);

    }
}

1 个答案:

答案 0 :(得分:0)

告诉这里的问题并不容易,但如果你关注帧率,那么我建议你阅读Andrew Davison的一部作品,特别是第二章和第三章。章节草案可在此处获取:http://fivedots.coe.psu.ac.th/~ad/jg/

虽然Swing是专为轻量级而设计的,但如果你用它做了不寻常的动画,还有其他注意事项。您需要将绘图计时到帧速率,定期生成,甚至可能在FPS之外运行UPS计时器。它仍然很有可能,你正朝着正确的方向前进。

很抱歉,我无法提供更多帮助。祝你好运。