从 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