Изображения большого размера приводят к исключению OufOfMemoryException

StackOverflow https://stackoverflow.com/questions/6371652

  •  28-10-2019
  •  | 
  •  

Вопрос

Я использую OpenMap, и мне нужно загружать изображения очень большого размера.
Я попытался загрузить эти изображения как большой растр, но возникла ошибка OufOfMemoryException.В режиме отладки конструктор слоя сообщает мне, что размеры изображения слишком велики.

В списке рассылки OpenMap я нашел MyJAIPlugin, который позволяет мне загружать и отображать файлы GeoTiff.

Как показать 300 МБ GeoTiff в OpenMap?

Это было полезно?

Решение

У меня была примерно такая же ситуация, когда я загружал карты HD с размером файла не менее 690 МБ.

Я также использовал JAIPlugIn из списка рассылки, и внутри они используют ведьму OMScalingRaster, которая работает с BufferedImage. Это ограничивает размер вашего изображения и вызывает сообщение отладки.

Я решил это, изменив OMScalingRaster. Я изменил BufferedImage на TiledImage для обработки больших изображений и исправил предстоящие ошибки. Здесь важно изменить метод scaleTo (Projection thisProj) для масштабирования с помощью JAI.

Теперь я могу загрузить файл, и он отобразится на карте. Но если вы слишком сильно уменьшите масштаб, это вызовет исключение OutOfMemoryException, потому что в моей модификации я делаю фрагмент изображения той части изображения, которая будет видна, и передаю его как BufferedImage в OMRaster.

Вот мод. в конце метода scaleTo:

родовое слово

Для других ошибок при замене BufferedImage на TiledImage используйте эквивалентные методы TiledImage. Но для экономии памяти следует использовать конструктор TiledImage с флагом sharedDataBuffer= true.

Например, этот мод. может обрабатывать карты (сжатые 690 МБ) с масштабом 1: 50000, и я могу уменьшить масштаб до 1: 600000 до того, как слой сообщит, что ему не хватает памяти.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top