从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错误。
如果你知道解决问题的方法,那就太棒了,问我是否需要更多的信息并抱歉我的英语。
谢谢!
Aenur56