Java SWT GC,如何强力冲洗双重缓冲图像?

时间:2011-10-26 13:11:24

标签: java graphics swt doublebuffered double-buffering

拥有以下代码:

image = new Image(display, imageData);
offScreenImageGC.drawImage(image, 0, 0, imageData.width, imageData.height, imageData.x, imageData.y, imageData.width, imageData.height);
/* Draw the off-screen image to the shell. */
shellGC.drawImage(offScreenImage, 0, 0);

...执行底部指令后:shellGC.drawImage(offScreenImage, 0, 0);有时我会在shellGC组件上看到图像,有时候 - 不是。只有当我“减慢”程序的执行时,例如当我处于调试模式时,我才能看到它。但是当它快速运行时 - 它没有显示出来。我希望它有力地展示,冲洗或任何你的名字,是否可能?

让我澄清一下,我想要实现的是实现一个基于帧的动画,但是还能够播放双缓冲,能够阻止它,只显示特定的单帧暂停等等。

谢谢。

1 个答案:

答案 0 :(得分:3)

结果是这是用SWT加倍缓冲的唯一安全方法:

canvas.addPaintListener(new PaintListener() {
              public void paintControl(PaintEvent event) {
                 //Obtain the next frame
                ImageData imageData = imageDataArray[iad.imageNumber];
                Image imageFrame = new Image(display, imageData);

                // Create the image to fill the canvas
                Image image = new Image(display, canvas.getBounds());

                // Set up the offscreen gc
                GC gcImage = new GC(image);

                //Draw the image offscreen
                gcImage.setBackground(event.gc.getBackground());
                gcImage.drawImage(imageFrame, 0, 0);

                // Draw the offscreen buffer to the screen
                event.gc.drawImage(image, 0, 0);

                imageFrame.dispose();
                image.dispose();
                gcImage.dispose();
              }
            });

....通过使用此方法仅用于双缓冲,保证了crossplatform等于运行时行为,并且不可预测的缓冲行为也消失了。