java中的分层绘图

java中的分层绘图,java,swing,java-2d,Java,Swing,Java 2d,我正在制作一个swing桌面应用程序。它绘制分层矢量图形,界面使用滚动条,并具有放大功能。矢量图形大约有5层,其中一层的绘制成本非常高。层可能需要不时重新绘制(简单动画) 目前情况如下: 创建一个缓冲图像 在图像上绘制每个层 缓冲后的图像使用大小相同的面板显示在屏幕上,以便使用滚动条 放大时,我会遇到性能问题。缩放可以使缓冲图像变得非常大。当比例为16倍时,图像的峰值可能为60000x60。当然这会占用很多内存,我想重新设计 但是我真的不知道从哪里开始,我觉得我在重新发明轮子。我对java2d的

我正在制作一个swing桌面应用程序。它绘制分层矢量图形,界面使用滚动条,并具有放大功能。矢量图形大约有5层,其中一层的绘制成本非常高。层可能需要不时重新绘制(简单动画)

目前情况如下:

  • 创建一个缓冲图像
  • 在图像上绘制每个层
  • 缓冲后的图像使用大小相同的面板显示在屏幕上,以便使用滚动条
  • 放大时,我会遇到性能问题。缩放可以使缓冲图像变得非常大。当比例为16倍时,图像的峰值可能为60000x60。当然这会占用很多内存,我想重新设计


    但是我真的不知道从哪里开始,我觉得我在重新发明轮子。我对java2d的了解也非常有限。我真的想通过使用一个库来改进这一点,我知道一定有一些东西具有我想要的功能。任何想到的库都不会创建缓冲映像。在您知道要显示多少输出之前,您正在光栅化输出

    查看“损坏”矩形,并有一个回调系统,告诉您光栅的“子部分”需要显示,然后只光栅化所需的像素。无论缩放级别如何,这都会给您带来相对一致的性能,因为要计算的唯一像素是要显示的像素,而不是概念上比以前多16^2倍像素的图像。

    您可以看看。我不确定它是否具有您需要的功能


    另一个想法是不创建大图像,只创建一个小图像,并在放大时将其放大(在Java中放大很快)。当然,这会导致较低质量(像素化)的图像,但目前这是可以接受的,您可以在渲染后立即用高质量的矢量图形替换它。

    我想到了这一点,但我真的很吃惊,这会影响使用滚动窗格时滚动的平滑度。此外,我觉得创建一个检测脏区域的系统就像重新发明轮子,必须有一个库来处理这种沉重的提升如果滚动有每秒速度限制,我们称之为“c”,你可以渲染c+视口+c;瞧:平滑滚动,因为你总是有缓存的图像可以依靠,你可以通过fast Blipingah重新填充它是的,你只需计算差异!非常感谢,我想这会让我继续:)你真的在重新发明轮子,但那是因为你想处理光栅化自己。如果你能利用Java2D系统,它会为你做到这一点;然而,我想你不这么做是有原因的。