2017-01-10 1 views
0


내 문제는 여기에 있습니다.
내 이미지를 업로드하기 위해 동일한 크기의 여러 이미지 중에서 선택하도록 사용자에게 요청합니다.
내 인터페이스에는 너비, 이미지 높이 및 파일 길이에 대한 정보를 제공하는 4 개의 버튼이 있습니다.

Bitmap.createScaledBitmap을 호출 한 이미지의 네 가지 버전을 만든 다음 해당 비트 맵을 다시 파일로 압축합니다.
필자는 비트 맵을 재활용하고 파일을 삭제해야 할 필요가 있음을 잘 알고 있습니다.

그러나 큰 파일을 계산할 때 createScaledBitmap 메서드는 메모리 부족 예외를 발생시킵니다. 파일을 디코딩 할 때 inJustDecodeBounds 옵션을 사용한다고했지만 null 비트 맵을 반환합니다.Android 이미지 크기 조정 받기

누군가이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = false; 
options.inPreferredConfig = Bitmap.Config.RGB_565; 
Bitmap bmp = getScaledBitmap(BitmapFactory.decodeFile(uri, options), ratio); 

private Bitmap getScaledBitmap(Bitmap bmp, float ratio) { 
    int srcWidth = bmp.getWidth(); 
    int srcHeight = bmp.getHeight(); 
    int dstWidth = (int)(srcWidth * ratio); 
    int dstHeight = (int)(srcHeight * ratio); 
    Bitmap result = Bitmap.createScaledBitmap(bmp, dstWidth, dstHeight, true); 
    bmp.recycle(); 
    return result; 
} 
+0

코드를 공유 할 수 있습니까? –

+0

귀하의 질문은 http://stackoverflow.com/questions/15552076/android-bitmap-createscaledbitmap-throws-java-lang-outofmemoryerror-mostly-on-je의 중복이라고 생각합니다. 도움이 될지 확신 할 수 없지만 답변을 살펴 보시기 바랍니다. –

+0

[Android Bitmap.createScaledBitmap의 중복 가능성은 주로 Jelly Bean 4.1에서 java.lang.OutOfMemoryError를 발생시킵니다.] (http://stackoverflow.com/questions/15552076/android-bitmap-createscaledbitmap-throws-java-lang-outofmemoryerror-mostly- on-je) –

답변

0

이 당신의 대답에 대답하기 위해, 나는 그것이 중복으로 생각하지 않는다 : 여기

는 코드입니다. 이전에 링크 된 스레드를 찾았지만 상당히 오래되어서 문제가 해결되지 않았습니다.

어쨌든, 나는이 문제를 해결했다.

먼저 메모리 관리를 위해 더 좋은 것으로 알려진 글라이드 라이브러리를 사용해 보았습니다. 그러나 개선이 있었지만 완벽하지는 않았으며 문제가 다시 발생했습니다.

android : largeHeap = "true" 내 악몽을 끝내라. 이것은 매니페스트의 응용 프로그램 필드에서 설정해야합니다.

다른 사람들에게 도움이되기를 바랍니다.

관련 문제