我正在创建一个编辑照片应用程序,在用户在缩放的图像预览中选择了一个裁剪区域后,我想在原始图像上裁剪一个比例区域。为此,我使用了 BitmapRegionDecoder,如下所示:
InputStream in = mContentResolver.openInputStream(this.photoUri);
BitmapRegionDecoder regionDecoder = BitmapRegionDecoder.newInstance(in, false);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = false;
//The following line causes an OutOfMemory
croppedBitmap = regionDecoder.decodeRegion(new Rect(x, y, destX, destY), o);
但我仍然收到 OutOfMemory 异常。我正在考虑使用 BitmapRegionDecoder 读取小切片并将其缓冲在 byte[] 上,但我不确定这是否是一个好的解决方案。
我认为必须有更好的解决方案,因为我已经使用过其他可以裁剪大图像的编辑工具。任何想法?
在此先感谢,内托。
* 可能的解决方案!* 在与很多人交谈后,经过长时间的互联网搜索,我在 Stackoverflow 中找到了其他类似问题的问题,目前似乎是解决此问题的最佳方法:使用 NDK。