我正在写一个用于拍照的相机模块。
由于预览的宽度/高度与图片的宽度/高度不同,我需要在拍摄照片时剪切图片,使其与您在屏幕中看到的相同。
我用这个:
mCamera.takePicture(null, null, mJpegCallback);
设置图片回调,然后在回调中解码和剪辑位图:
Bitmap originBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
...
Bitmap bitmap = Bitmap.createBitmap(originBitmap, 0, 0, clipWidth, clipHeight);
但是,创建剪辑位图时会发生OutOfMemoryError
。我尝试了多种方法来重用数据而不是复制新的位图,但它不起作用。那么,有人可以帮我吗?
答案 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