我使用 WorldWind 来绘制数据,并且我还需要一个 2D 界面作为叠加层。我每秒创建一个新的 BufferedImage 几次来更新数据,但这需要很多开销。我想在现有图像上重绘以减少 CPU 和内存方面的整体使用率。我在重绘之前使用此代码:
BufferedImage img = TrackingService.img.get(width).get(height);
g = img.createGraphics();
g.setComposite(AlphaComposite.getInstance(AlphaComposite.CLEAR));
g.fillRect(0,0,img.getWidth(),img.getHeight());
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
image = img;
每个可以添加到 UI 的元素都返回一个 BufferedImage 的 HashMap 到 Point。每个 BufferedImage 和点都转换为 ButtonAnnotation 并添加到 AnnotationLayer。每 x 毫秒,系统将:
layer.removeAllAnnotations();
layer.addAnnotations(buttonAnnotations);
redraw()
在 AWT 事件队列上。这适用于标记等,但这些图像永远不会改变我使用的第一张图像。我尝试替换图层、处理它等。我尝试将图像写入调试文件并注意到 BufferedImage 正在按预期更改。问题是 WorldWind 必须在某个级别缓存图像。由于我为每个新的 ButtonAnnotation 提供了相同的 BufferedImage 实例,并使用 Graphics2D 进行了一些修改,因此似乎假设没有进行任何更改,而实际上已经进行了更改。如果我每次想要更改数据时都使用新的 BufferedImage,这将非常有效。
我也尝试过This Question中的建议,但它们对我不起作用。