2017-11-03 11 views
0

Android 6.0을 실행하는 하나의 기기에서 작동하는 코드가 적합하지 않습니다.
누구나 나를 만나러 갈 수 있을까요?BitmapFactory.decodeFile이 null을 반환합니까?

File f = new File(mCurrentPhotoPath); 
if (!f.exists()) { 
    return null; 
} 
Bitmap bitmap = BitmapFactory.decodeFile(f.getAbsolutePath()); 
Log.d(TAG,mCurrentPhotoPath); 

if (bitmap == null) { 
    Log.d(TAG,"bitmap is null"); 
    bitmap = BitmapFactory.decodeFile(f.getAbsolutePath()); 
} 

파일의 첫 번째 디코딩 후 파일이 있지만 null이 반환됩니다. 나는 블록 (bitmap == null)을 추가하고 파일을 다시 디코딩해야했습니다. 이 블록에서 파일이 디코딩되고 필요한 비트 맵이 반환됩니다. 아무도 여기서 무슨 일이 일어날 지 설명 할 수 있습니까?

+0

Logcat을 공유해주십시오. 무엇을 보여주고 있습니까? –

+0

D/라이브러리에 의존는 : --- SkImageDecoder :: 공장은 널 (null) D/ImagesWorkerTask 반환 /storage/emulated/0/Bliznecov/IMG_20171103_160000_1954657017.jpg를 D/ImagesWorkerTask는 : 비트 맵이 null의 D/라이브러리에 의존 : jpeg_decoder 모드 (1) , colorType 4, w 1728, h 2880, 샘플 1, bsLength 0 !! –

+0

그것의 너무 큰 시도 :'BitmapFactory.Options # inSampleSize = 4' (예를 들어) 그리고 만약 당신이 여전히 null이되는지보십시오 -'decodeFile'에 두번째 매개 변수로 전달하십시오. – pskink

답변

0

비트 맵이 사용 가능한 메모리에 대해 커질 경우 decodeFile()은 null을 반환합니다.

작은 사진을보십시오.

또한로드하는 동안 크기를 조정할 수 있습니다.

+0

내 그림은 950 KB이지만 두 번째 디코딩 리턴 비트 맵은 ... –

+0

jpg 파일이 크지 않습니다. 그러나 해상도는'w 1728, h 2880'이며 매우 큰 비트 맵이 될 것입니다. 자신에게 필요한 메모리 양을 쉽게 계산할 수 있습니다. 한 픽셀에 대해 4 바이트를 가져옵니다. – greenapps

+0

두 번째 시도가 성공하면 GC가 일부 메모리를 해제 한 것과 관련이 있습니다. – greenapps