2

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

4

0 に答える 0