【发布时间】:2013-12-06 02:02:12
【问题描述】:
我有一个非常大的复杂图表,需要即时绘制。
我已经在使用双缓冲技术来绘制图像(来自这个答案:Using threads to paint panel in java)但是,正在绘制的生成图像太大以至于不能绘制为单个图像(以及多个图像需要绘制它不能同时存储在内存中)。出于这个原因,我绘制了视图的当前可见区域 + 一些边距。当我滚动时,我绘制下一个将要出现的区域,并从内存中删除我们刚刚来自的区域。但是,如果用户随后决定改变方向,他们需要等待该区域再次被绘制。我的问题是这样的:
如果正在绘制的屏幕的单个“帧”大约为 1000*1000 像素,其中绘制了大约 5000 条线/圆(图形的节点/边缘),那么每个重新绘制此图像可能会更有效时间,或者有没有办法将图像有效地缓存到硬盘(以避免java堆限制)。
我已经尽我所能优化了绘制方法,但是如果用户快速滚动到,仍然会有几秒钟的延迟(即在绘制下一组“帧”之前移出绘制区域) .所以我的第二个问题是:迁移到 OpenGL 会带来很大的改进,是否需要对代码的基础结构进行重大更改? (几天前我尝试过这样做,发现它并不像我想象的那么简单 - 经常导致计算机崩溃)。
【问题讨论】: