0

我在 SO 帖子中发现了PNGJ 。它提供的优势,尤其是在内存效率方面,正是我所寻找的。

现在我将实现它以从 Netbeans 视觉库中捕获场景。向下滚动到文档中,我发现了以下声明:

不带离屏缓冲区导出

前面的代码使用 BufferedImage 将图像存储在内存中。当场景很大时,可能会发生图像不适合内存的情况。因此,您必须使用您的 Graphics2D 实例和 Scene.paint (Graphics2D) 方法来即时导出场景,例如 PDF 编写器、SVG 文件编写器或元图形文件编写器。

是的,它确实与 PNGJ 合作:避免使用 BufferedImage。但我不知道如何实现“你的 Graphics2D”并将其发送给 PNGJ。

任何建议都会有所帮助。提前谢谢。

4

1 回答 1

0

我不熟悉 Netbeans 可视化库,但对于“使用您的 Graphics2D 实例”以避免在BufferedImage. 在任何情况下,Scene.paint (Graphics2D)都会以任意顺序绘制所有对象,因此您需要有完整的目标可用,您无法流式传输任何内容。这不是 PNGJ 的事情,Scene.paint()依赖于java.awt.*进行高级渲染,所以你无法逃避。

我能想到的唯一解决方法是尝试进行部分绘制,渲染连续的水平条纹(到 BufferedImage)并用 PNGJ 写入(连接它们)。但我不确定这是否可能,性能可能会受到影响。

您还可以尝试一些“交换磁盘”图像实现,如DiskMemImage

于 2013-09-26T12:12:02.147 回答