我在SO帖子中发现了PNGJ。它提供的优势,特别是在内存效率方面,确实是我所寻找的。 p>
现在我要实现它来从Netbeans Visual Library中捕获场景。向下滚动到docs我发现了这个声明:
不使用屏幕外缓冲区导出
前面的代码使用BufferedImage将图像存储在内存中。当场景很大时,可能会发生图像不适合内存的情况。因此,您必须使用Graphics2D实例和Scene.paint(Graphics2D)方法即时导出场景,例如PDF编写器,SVG文件编写器或元图形文件编写器。
是的,它确实与PNGJ合作:避免使用BufferedImage。但我不知道如何实现“你的Graphics2D”并将其发送给PNGJ。
任何建议都会有所帮助。 Thx提前。
答案 0 :(得分:0)
我不熟悉Netbeans Visual Library,但我对“使用你的Graphics2D实例”避免使用BufferedImage
的大量内存感觉不太清楚。在任何情况下,Scene.paint (Graphics2D)
都会以任意顺序绘制所有对象,因此您需要拥有完整的目标,不能流式传输任何内容。它不是PNGJ的东西,Scene.paint()
依靠java.awt.*
来进行高级渲染,所以你无法摆脱它。
我能想到的唯一解决方法是尝试进行部分绘制,渲染成功的水平条纹(到BufferedImage)并用PNGJ编写它们(连接它们)。但我不确定这是否可行,而且性能可能会受到影响。
您还可以尝试一些“交换磁盘”图像实现,如DiskMemImage