我偶然发现了一个我想要修理的瓶颈。
我需要让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();
}
如果有助于我开发一个示波器类型的应用程序,它需要能够实时绘制值,但我还需要能够显示值的历史记录。
答案 0 :(得分:0)
在每个区间内渲染每个区间" mini"的BufferedImage。因此,举一个例子,假设您每秒渲染一次,并且您希望显示20秒的历史记录。
因此,您将当前的第二个渲染为" 1秒大小"图片。然后,您将前一个19秒内的图像缓存,然后将它们一个接一个地压印到新的总图像中,然后显示它。
下一步,你放下最旧的图像,创建一个新图像,粘贴在最后,冲洗并重复。
如果您的整体画面尺寸发生变化,那么当您再次渲染所有作品时...... c' est la vie。
显然你会每秒抽样一次以上,但你得到了它的要点。
所有这些都假设这比每次从头开始重新渲染整个事物要便宜。