进行动态重新调整大小的BufferedImage滚动,以便主动呈现

时间:2015-01-27 01:16:06

标签: java canvas bufferedimage

我偶然发现了一个我想要修理的瓶颈。

我需要让BufferedImage随着时间的推移而增长,但是Buffered图像应该支持滚动,因为我的应用程序要求Bufferedimage随着时间的推移变大。但是,绘制调用不是由事件派发线程完成的。

我有一个执行渲染调用的while循环。我试图创建一个Canvas的实例并将其添加到JScrollPane但是当我采用这种方法时,JScrollPane执行自己的绘制调用,我不确定JScrollPane将如何检测到画布已在运行时调整大小。

另一个问题是,因为在画布中我使用BufferedImage进行绘制,我无法通过临时BufferedImage来调整它。

以下是我尝试创建新的更大的BufferedImage

的方法
if(needsToBeResized)
{
    BufferedImage temporaryBufferedImag = 
    new BufferedImage(originalImage + extraSpace, height, originalImage.getType());

    Graphics g2d = temporaryBufferedImag.createGraphics();
    g2d.drawImage(originalImage, 0,0,null);

    //I presume that this should copy the graphics object with the original img
    originalImage = temporaryBufferedImag;
    g2d.dispose();
}

如果有助于我开发一个示波器类型的应用程序,它需要能够实时绘制值,但我还需要能够显示值的历史记录。

1 个答案:

答案 0 :(得分:0)

在每个区间内渲染每个区间" mini"的BufferedImage。因此,举一个例子,假设您每秒渲染一次,并且您希望显示20秒的历史记录。

因此,您将当前的第二个渲染为" 1秒大小"图片。然后,您将前一个19秒内的图像缓存,然后将它们一个接一个地压印到新的总图像中,然后显示它。

下一步,你放下最旧的图像,创建一个新图像,粘贴在最后,冲洗并重复。

如果您的整体画面尺寸发生变化,那么当您再次渲染所有作品时...... c' est la vie。

显然你会每秒抽样一次以上,但你得到了它的要点。

所有这些都假设这比每次从头开始重新渲染整个事物要便宜。