2013-07-12 16 views
0

我有,我用它來拍照的相機,我的問題是關於onPictureTaken功能:位圖內存上合影留念

public Camera.PictureCallback jpeghandler = new Camera.PictureCallback() { 

    public void onPictureTaken(byte[] data, Camera camera) { 

     Options options = new BitmapFactory.Options(); 
     options.inScaled = false; 
     options.inDither = false; 
     options.inSampleSize = 2; 
     options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     photo = BitmapFactory.decodeByteArray(data, 0, data.length, options); 

     Matrix matrix = new Matrix(); 
     matrix.postRotate(90); 
     Bitmap rotate_bitmap = Bitmap.createBitmap(photo , 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 
     photo.recycle(); 
     photo = Bitmap.createBitmap(rotate_bitmap, 0, rotate_bitmap.getHeight()/2 - rotate_bitmap.getWidth()/2, rotate_bitmap.getWidth(), rotate_bitmap.getWidth()); 

     Intent resultIntent = new Intent(); 
     String image_url = MediaStore.Images.Media.insertImage(getContentResolver(), photo, "photo" , null); 
     resultIntent.putExtra("Photo_Taken", image_url); 
     setResult(Activity.RESULT_OK, resultIntent); 

     photo.recycle(); 
     rotate_bitmap.recycle(); 
     finish(); 

    } 

}; 

我打開這一個,然後我採取了另一項活動圖片,關閉此圖片並將圖片的位置傳回第一個活動。問題是,當我重新打開此活動拍攝另一張照片也給了我一個內存不足的錯誤在這條線:

Bitmap rotate_bitmap = Bitmap.createBitmap(photo , 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 

什麼是錯的,什麼是怎麼回事?因爲照片大小始終低於25Mb,然後在第二張照片中顯示:13128976-字節分配內存不足。

謝謝!

回答

0

堆滿[[圖像數據] +(其他數據)>(堆大小)]。我相信你有兩個存儲在堆上的照片(當第二個活動啓動時,第一個活動的數據(包括照片)還沒有從內存中清除)。

如果你使用的Eclipse我強烈建議安裝Memory Analyzer (MAT)

檢查my question獲取更多信息。