2013-07-12 9 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

힙이 가득 차 있습니다 [(이미지 데이터) + (기타 데이터)> (힙 크기)]. 두 번째 활동이 시작되면 첫 번째 활동의 데이터 (사진 포함)가 아직 메모리에서 지워지지 않은 상태에서 힙에 두 개의 사진 인스턴스가 저장되어 있다고 생각합니다.

이클립스를 사용하는 경우 난 강력 대한 추가 정보를 원하시면 Memory Analyzer (MAT)

확인 my question를 설치하는 것이 좋습니다.

관련 문제