2014-01-09 40 views
0

我正在寫一個相機模塊,用於拍攝照片。剪輯位圖時發生OutOfMemoryError BitmapFactory.createBitmap

由於預覽的寬度/高度與圖片的寬度/高度不同,我需要在拍攝照片時剪切圖片,使其與屏幕中顯示的相同。

我用這個:

mCamera.takePicture(null, null, mJpegCallback); 

設置圖像回調,然後解碼和剪輯回調位圖:

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

然而,OutOfMemoryError發生時創建剪輯bitmap.I已經嘗試了許多方式來重複使用數據,而不是複製新的位圖,但它不起作用。那麼,請有人能幫我嗎?

+0

有沒有任何限制/要求,不允許你使用相機意圖API? – nikvs

+0

@nikvs,是的,這個應用程序將綁定到一個自定義的硬件,我們想要按下該設備上指定的物理按鈕時拍攝的照片,相機通知API不符合我們的需要,所以我們必須自己寫。 –

回答

1

Thandk你都在上面!!我解決了這個問題,android有一個名爲BitmapRegionDecoder的類可以滿足我的需要。我只能解碼指定的區域,而不是解碼整個位圖,並創建一個新的剪切位圖,後者很容易導致OOM。

+1

嗨@Joe我是也陷入了同樣的問題。你可以請你發佈你的解決方案嗎?因爲它對其他人來說是完整的。 – user123456

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 
1

在應用程序標記下的清單文件中添加android:LargeHeap = true。

+0

這裏是爲什麼你不應該去largeHeap作爲OOM問題的第一個手段:[largeHeap陷阱](http://stackoverflow.com/a/11275704/2246121) – Magnus

+0

@Magnus謝謝你的信息 – anjaneya