MapView (osmdroid) からビットマップを作成するときに問題があります。このマップは、携帯電話のほぼ全画面を占めます (常に縦向きモード)。表示された地図の中央の正方形 (一辺のサイズ: 画面の幅) からビットマップを作成し、ファイルに保存して後でアプリで使用したいと考えています。
1枚の絵が千の言葉以上を物語っているので、私はこれを描きました:
これは、ビットマップを取得するために使用する方法です。
public static Bitmap loadBitmapFromMapView(final MapView mapview, final int width, final int height) {
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
mapview.setDrawingCacheEnabled(true);
b = Bitmap.createBitmap(mapview.getDrawingCache(), 0, ((height - width) / 2), width, width);
mapview.setDrawingCacheEnabled(false);
return b;
}
その後 :
public static File saveBitmapAsFile(final Bitmap bmp) {
if (mSaveDirectory == null || !mSaveDirectory.exists()) {
final ContextWrapper cWrapper = new ContextWrapper(getApplicationContext());
mSaveDirectory = cWrapper.getFilesDir();
if (!mSaveDirectory.exists()) {
mSaveDirectory.mkdirs();
}
}
try {
final String imageName = "Image_" + System.currentTimeMillis() + ".png";
final File file = new File(mSaveDirectory, imageName);
final FileOutputStream out = getApplicationContext().openFileOutput(imageName, Context.MODE_WORLD_READABLE);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
return file;
} catch (final Exception e) {
e.printStackTrace();
}
return null;
}
問題は、最初のメソッドにあり、3 回のうち 2 回、次の行に OutOfMemoryException があります。
b = Bitmap.createBitmap(mapview.getDrawingCache(), 0, ((height - width) / 2), width, width);
例外がスローされない場合、正常に機能し、マップは適切な形式で保存されます。
私はたくさん検索しましたが、ビューから createBitmap の OutOfMemory エラーを解決して解決する解決策が見つかりませんでした。
あなたがそれを解決する方法を知っていれば、それは素晴らしいことです.さらに情報が必要な場合は私に尋ねてください.私の英語で申し訳ありません.
ありがとう !
Aenur56