用java2d绘制复杂生成图像
我有一个非常大的复杂的图表,需要在飞行中绘制 我已经在使用双缓冲技术来绘制图像(从这个答案:),但是,正在绘制的生成图像太大,无法绘制为单个图像(并且绘制所需的多个图像不能同时存储在内存中)。因此,我绘制视图的当前可见区域+一些边距。当我滚动时,我画下下一个区域,并从内存中删除我们刚来的区域。但是,如果用户随后决定改变方向,则需要等待该区域再次绘制。我的问题是: 如果正在绘制的屏幕的单个“帧”约为1000*1000像素,其中绘制了约5000条线/圆(图形的节点/边缘),则每次重新绘制此图像是否可能更有效,或者是否有方法将图像有效地缓存到硬盘(以避免java堆限制)用java2d绘制复杂生成图像,java,swing,opengl,Java,Swing,Opengl,我有一个非常大的复杂的图表,需要在飞行中绘制 我已经在使用双缓冲技术来绘制图像(从这个答案:),但是,正在绘制的生成图像太大,无法绘制为单个图像(并且绘制所需的多个图像不能同时存储在内存中)。因此,我绘制视图的当前可见区域+一些边距。当我滚动时,我画下下一个区域,并从内存中删除我们刚来的区域。但是,如果用户随后决定改变方向,则需要等待该区域再次绘制。我的问题是: 如果正在绘制的屏幕的单个“帧”约为1000*1000像素,其中绘制了约5000条线/圆(图形的节点/边缘),则每次重新绘制此图像是否可
我已经尽我所能优化了绘制方法,但是如果用户快速滚动到,仍然会有几秒钟的延迟(即在绘制下一组“帧”之前移出绘制区域)。所以我的第二个问题是:迁移到OpenGL会带来很大的改进吗?它会要求对代码的基础结构进行重大更改吗?(几天前我试着这么做,发现事情并不像我想象的那么简单——经常导致计算机崩溃)。我想到了几件事:
- 验证你的工作假设;在目标平台上对动画预算进行自计时以进行比较,如下所示
- 将您的方法与引用的示例进行比较;它可扩展到1000,并可将选择拖动到数百
CellRenderPane
检查了底层机制
GridLayout
落后于低千,而JTable
则扩展到数百万JGraph
也使用该模式;请考虑更新或您的问题,以反映您的发现。只是我理解,似乎你是在建议我用表格画出不同的图像,需要画出来。这听起来是个不错的主意,但我不确定如何实现它,可能是因为您的回答表明每个单元格都有一个唯一的可见区域,我只想将该可见区域传递给我当前的绘图系统?@ZackNewsham:customJTable
渲染器不是个坏主意;请参阅上面的渲染链接。嘿,我只是想让你知道我使用了自定义渲染器,使我的实现稍微慢了一点(处理这个问题),但更加一致。