У меня была почти такая же ситуация при загрузке hd-карт размером не менее 690 МБ.
Я также использовал JAIPlugIn из списка рассылки, и внутри они используют OMScalingRaster, который работает с BufferedImage. Это ограничивает размер вашего изображения и вызывает сообщение об отладке.
Я решил это, изменив OMScalingRaster. Я изменил BufferedImage на TiledImage для обработки больших изображений и исправил будущие ошибки. Здесь важно изменить метод scaleTo (Projection thisProj) для масштабирования с помощью JAI.
Теперь я могу загрузить файл, и он отображается на карте. Но если вы уменьшаете масштаб слишком сильно, он выдаст исключение OutOfMemoryException, потому что в моей модификации я создаю подизображение части изображения, которое будет видимым, и передаю его как BufferedImage OMRaster.
Вот мод. в конце метода scaleTo:
// Now we can grab the bit we want out of the source
// and
// scale it to fit the intersection.
// Calc width adjustment
float widthAdj = (float) ((double) iRect.width
/ (double) clipRect.width);
// Calc height adjustment
float heightAdj = (float) ((double) iRect.height
/ (double) clipRect.height);
// Create the transform
// JAI-Version
ParameterBlock pb = new ParameterBlock();
pb.addSource(sourceImage.getSubImage(clipRect.x,
clipRect.y,
clipRect.width,
clipRect.height).getAsBufferedImage());
pb.add(widthAdj); // The xScale
pb.add(heightAdj); // The yScale
pb.add(0.0F); // The x translation
pb.add(0.0F); // The y translation
RenderedOp newImage = JAI.create("scale",pb, null);
bitmap = newImage.getAsBufferedImage();
point1.setLocation(iRect.x, iRect.y);
// setVisible(currentVisibility);
}
} else {
bitmap = null;
}
}
Для других ошибок, заменив BufferedImage на TiledImage, используйте эквивалентные TiledImage-методы. Но для экономии памяти вы должны использовать конструктор TiledImage с флагом sharedDataBuffer = true.
Например, этот мод. может обрабатывать карты (сжатые 690 МБ) с масштабированием 1: 50000, и я могу уменьшить масштаб до 1: 600000, пока слой не скажет, что ему не хватает памяти.