大尺寸图像导致OufOfMemoryException
-
28-10-2019 - |
题
我正在使用OpenMap,并且必须加载非常大尺寸的图像。
我试图将这些图像加载为大栅格,但由于OufOfMemoryException而失败。在调试模式下,图层构造函数告诉我图像尺寸太大。
在OpenMap邮件列表中,我找到了MyJAIPlugin,它使我可以加载和显示GeoTiff文件。
如何在OpenMap中显示300mb的GeoTiff?
解决方案
通过加载至少690mb文件大小的高清地图,我遇到了几乎相同的情况。
我还从邮件列表中使用了JAIPlugIn,并且内部使用了OMScalingRaster,它与BufferedImage一起使用。这些限制了您的图像大小并导致了调试消息。
我已经通过修改OMScalingRaster解决了它。我已将BufferedImage更改为TiledImage以处理大图像并修复了即将发生的错误。在这里重要的是,更改scaleTo(Projection thisProj)方法以与JAI一起缩放。
现在我可以加载文件并将其呈现在地图上。但是,如果缩小得太多,它将抛出OutOfMemoryException,因为在我的修改中,我对图像的一部分做了一个子图像,该图像将是可见的,并将其作为BufferedImage传递给OMRaster。
这是国防部。在scaleTo-method结束时: 通用标签
对于其他错误,通过将TiledImage替换为BufferedImage,请使用等效的TiledImage方法。但是,为了节省内存,您应该将TiledImage构造函数与sharedDataBuffer标志= true一起使用。
用于示例此mod。可以处理比例为1:50000的地图(压缩后的690mb),在图层表示内存不足之前,我可以缩小到1:600000。