少なくとも690MBのファイルサイズでHDマップをロードすることで、ほぼ同じ状況になりました。
また、メーリング リストの 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 メソッドを使用します。ただし、メモリを節約するには、sharedDataBuffer フラグ = true で TiledImage コンストラクターを使用する必要があります。
たとえば、この mod を使用します。1:50000 のスケーリングでマップ (圧縮された 690mb) を処理でき、レイヤーがメモリ不足であると言う前に 1:600000 にズームアウトできます。