【发布时间】:2018-12-15 01:12:49
【问题描述】:
我的应用使用设备相机拍摄图像,然后打开它以便用户执行一些处理。为此,我检查图像方向并在必要时旋转它,我这样做是这样的:
Bitmap image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), lastTaken);
int rotation = getCameraPhotoOrientation(filePath);
if (0 < rotation)
{
Matrix mx = new Matrix();
mx.setRotate((float) rotation);
image = Bitmap.createBitmap(image, 0, 0, image.getWidth(), image.getHeight(), mx, true);
}
此代码适用于大多数设备,但是在我一直使用的旧测试设备之一上,当图像旋转时它会导致OutOfMemoryException,大概是因为它试图在内存中保存图像的两个副本。
我怎样才能避免这种情况?
如果在此过程中没有一种简单的方法来防止出现问题,有没有一种方法可以测试我有多少可用内存并将相机使用的图像分辨率限制为可以留下足够的图像分辨率这个操作的空间?我已经指定了分辨率,所以我如何比较图像大小和可用内存以确定什么分辨率是安全的确实是一个问题。我的一个限制是用户所做的更改必须在原始图像上,因此编辑图像的较小副本不会剪切它,除非有一种简单的方法可以在存储的版本上反映这些更改。因此,将图像缩小到内存可以支持的大小无论如何都不会是一场灾难。
【问题讨论】:
标签: android memory-management android-bitmap