2012-12-12 4 views
0
Drawable image = Drawable.createFromPath(newImagepath); 
defective_image.setBackgroundDrawable(image); 

이미지는 문자열 인 newImagePath 변수에 저장됩니다. 위 코드는 outOfMemory Exception을 던집니다.SD 카드에서 이미지를 검색 할 수 없습니다.

또한 이미지를 Bitmap 객체로 가져와 보았습니다.

Bitmap bitmapImg= BitmapFactory.decodeFile(newImagepath); 

위의 경우 bitmapImg는 Null입니다. (예외없이)

그러나 파일로 검색되면 성공합니다. 이 이미지를 RelativeLayout의 배경으로 사용하기 때문에 내 용도로 사용되지 않습니다.

File imageFile = new File(newImagepath); 
String imgPath = imageFile.getAbsolutePath(); 

imgPath는 경로가 잘못되지 않았다는 결론을 내리는 newImagePath와 동일합니다. 또한 SDCard에서 이미지의 존재를 확인했습니다.

이 이미지는 장치의 카메라에서 캡처 한 것입니다. 이 코드는 에뮬레이터에서 성공적으로 작동합니다. 장치에서 디버깅 할 때 위와 같은 오류가 발견되었습니다. 나는 또한 시도 : -

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inJustDecodeBounds = true; 
+0

볼 수'을 매니페스트에? – Stan

+0

<사용 권한 android : name = "android.permission.WRITE_EXTERNAL_STORAGE"/> 쓰기가 있습니다. 그게 적용되지 않나요? 그리고 그 이상을 File 객체로 읽어 들일 수 있습니다. Bitmap 또는 Drawable 객체 만 문제를 만들고 있습니다. –

+0

Drawable 객체로 이미지를 가져 오니 OutOfMemory 예외가 발생했기 때문에 이미지 관련 문제로 생각했습니다. –

답변

0

메모리 문제가 될 것으로 보인다. 그래서 옵션

options.inJustDecodeBounds = true; 

다음 필드를 보면이 비트 맵의 ​​크기를 점점 비트 맵의 ​​크기를 디코딩하는 것이 좋습니다 (비트 맵을 사용하려고하지 않습니다 : 그것은 null가됩니다) :

options.outWidth; 
options.outHeight; 

그런 다음 화면 크기에 따라 크기가 조정 된 비트 맵을 만듭니다. 이렇게하려면 <사용 - 권한 안드로이드 : 이름 = "android.permission.READ_EXTERNAL_STORAGE"/> '당신이 있습니까

BitmapFactory.Options.inSampleSize 
0

차라리 파일 경로에서 이미지를 디코딩하는 BitmapFactory을 사용 :

Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); 
jpgView.setImageDrawable(bitmap); 
+0

답변이 작동하지 않습니다. 나는 이미 그것을 시도했다. –

관련 문제