从OSM MapView创建Bitmap时出现OutOfMemory异常

时间:2013-10-30 22:00:46

标签: android view bitmap out-of-memory

从MapView(osmdroid)创建位图时遇到问题。此地图几乎占据了手机的整个屏幕(始终处于纵向模式)。 我想从显示的地图中心的正方形(侧面尺寸:屏幕宽度)创建一个位图,并将其保存在一个文件中,以便在我的应用程序中使用它。

一张图片说的超过一千字,所以我画了这个:

enter image description here

这是我用来获取位图的方法:

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;
}

问题在于我的第一个方法,三次中有两次,我在这一行有一个OutOfMemoryException:

b = Bitmap.createBitmap(mapview.getDrawingCache(), 0, ((height - width) / 2), width, width);

当没有抛出异常时,它运行良好,我的地图以良好的格式保存。

我搜索了很多,但是我找不到一个有效的解决方案,并从视图中解析了createBitmap上的OutOfMemory错误。

如果你知道解决问题的方法,那就太棒了,问我是否需要更多的信息并抱歉我的英语。

谢谢!

Aenur56

0 个答案:

没有答案