2

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

一张图说了一千多个字,所以我画了这个:

在此处输入图像描述

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

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 错误。

如果您知道解决问题的方法,那就太好了,请问您是否需要更多信息,并对我的英语感到抱歉。

谢谢 !

艾努尔56

4

0 回答 0