剪辑位图使用BitmapFactory.createBitmap时发生OutOfMemoryError

时间:2014-01-09 09:00:18

标签: android bitmap jpeg out-of-memory

我正在写一个用于拍照的相机模块。

由于预览的宽度/高度与图片的宽度/高度不同,我需要在拍摄照片时剪切图片,使其与您在屏幕中看到的相同。

我用这个:

mCamera.takePicture(null, null, mJpegCallback);

设置图片回调,然后在回调中解码和剪辑位图:

Bitmap originBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
...
Bitmap bitmap = Bitmap.createBitmap(originBitmap, 0, 0, clipWidth, clipHeight);

但是,创建剪辑位图时会发生OutOfMemoryError。我尝试了多种方法来重用数据而不是复制新的位图,但它不起作用。那么,有人可以帮我吗?

3 个答案:

答案 0 :(得分:1)

在应用程序标记下的清单文件中添加android:LargeHeap = true。

答案 1 :(得分:1)

向你们致敬!我解决了这个问题,android有一个名为BitmapRegionDecoder的类可以满足我的需要。我只能解码指定的区域而不是解码整个位图,并创建一个新的剪切位图,后者很容易导致OOM。

答案 2 :(得分:0)

图片上的很多OutOfMemory异常,搜索它。这可能是因为图像对于内存来说太大了。收到图像时开始的好地方是:

    BitmapFactory.options options = new BitmapFactory.options();
    options.inJustDecodeBound = true;
    //this allows you to edit the size of the image before trying to load it into memory