我需要用相机拍照,如果根据图片大小,在将其保存到图库之前旋转它。
我在用
Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(imageCaptureIntent, IMAGE_CAPTURE);
拍摄照片并将其保存到临时文件。
然后
Bitmap bmp = BitmapFactory.decodeFile(imagePath);
String str = android.provider.MediaStore.Images.Media.insertImage(cr, bmp, name, description);
保存它。
这是我试图用来旋转位图的代码
Matrix matrix = new Matrix();
matrix.postRotate(180);
Bitmap x = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
android.provider.MediaStore.Images.Media.insertImage(cr, x, name, description);
问题是我遇到了 OutOfMemoryException。
有没有更好的方法来处理位图以避免破坏内存?
~提前致谢,问候
最佳答案
我认为没有更好的方法来处理位图。您可以尝试将文件中的数据直接解析为 Byte[] 的一部分,然后分段操作;这很难,您最终可能会得到非常难看的代码。
我还建议如下:
使用
android.provider.MediaStore.Images.Media.insertImage(cr, imagePath, name, description)
而不是android.provider.MediaStore.Images.Media.insertImage (cr, bmp, name, description)
这样就不需要调用Bitmap bmp = BitmapFactory.decodeFile(imagePath)
并且此时不会将位图加载到内存中。在整个代码中,确保除非需要,否则不会加载位图。将不再需要的位图设置为
null
并调用垃圾收集器,或使用bmp.recycle()
。
关于android - 如何使用大位图。旋转并插入画廊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300019/