2013-07-29 3 views
0

이 메서드는 내장 카메라로 촬영 한 이미지에서는 잘 작동하지만 외부 소스 (웹, 실제 카메라 등)에서 가져온 이미지의 경우에는 정상적으로 작동합니다. BitmapFactory.decodeStream (imageStream)은 null을 반환합니다. 누구든지 오류의 원인을 알 수 있습니까?BitmapFactory.decodeStream은 일부 이미지에 대해 null을 반환합니다.

protected void onActivityResult(int requestCode, int resultCode, 
     Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 
     Uri selectedImage = imageReturnedIntent.getData(); 
     InputStream imageStream = null; 
     try { 
      imageStream = getContentResolver().openInputStream(selectedImage); 
     } catch (FileNotFoundException e) { 
      Log.d("onActivityResult", "FileNotFoundException"); 
      e.printStackTrace(); 
     } 
     Bitmap unscaledImage = BitmapFactory.decodeStream(imageStream); 
     image = Bitmap.createScaledBitmap(unscaledImage, IMAGE_SIZE, IMAGE_SIZE, false); 
     Log.d("Unscaled image byte count", "Bytes: " + unscaledImage.getByteCount()); 
     Log.d("Scaled image byte count", "Bytes: " + image.getByteCount()); 
    } 
} 

여러분의 도움에 감사드립니다 :

여기
07-29 17:25:48.105: E/AndroidRuntime(32296): FATAL EXCEPTION: main 
07-29 17:25:48.105: E/AndroidRuntime(32296): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.google.android.gallery3d.provider/picasa/item/5716149895129356946 flg=0x1 }} to activity {com.example.news_app/com.example.news_app.android.ui.SettingsActivity}: java.lang.NullPointerException 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.ActivityThread.deliverResults(ActivityThread.java:3319) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3362) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.ActivityThread.access$1100(ActivityThread.java:141) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.os.Looper.loop(Looper.java:137) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.ActivityThread.main(ActivityThread.java:5041) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at java.lang.reflect.Method.invokeNative(Native Method) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at java.lang.reflect.Method.invoke(Method.java:511) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at dalvik.system.NativeStart.main(Native Method) 
07-29 17:25:48.105: E/AndroidRuntime(32296): Caused by: java.lang.NullPointerException 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:474) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at com.example.news_app.android.ui.SettingsActivity.onActivityResult(SettingsActivity.java:84) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.Activity.dispatchActivityResult(Activity.java:5293) 
07-29 17:25:48.105: E/AndroidRuntime(32296): at android.app.ActivityThread.deliverResults(ActivityThread.java:3315) 
07-29 17:25:48.105: E/AndroidRuntime(32296): ... 11 more 

은 내가 사용하는 방법입니다 :

여기 스택 추적입니다!

+0

이미지에 대해 Uri의 selectedImage가 비어 있지 않은지 확인할 수 있습니까? 어쩌면 문제가있을 수 있습니다. 또한 이미지가 손상 될 수도 있습니다. – Moy

+0

비트 맵로드와 관련이 없으므로 스택 추적을 다시 읽어야합니다. 이미 닫힌 커서를 다시 쿼리하려고 시도하는 것 같습니다. – Qberticus

+0

안녕하세요 @Moises, URI를 확인하고 null이 아닙니다. 경로는 예를 들어 충돌하는 한 이미지의/picasa/item/5716149895129356946입니다. 두 개의 다른 출처 (Google 이미지 및 Picassa)에서 왔고 카메라로 촬영 한 다른 이미지가 올바르게 작동하기 때문에 이미지가 손상되지는 않습니다. 특정 유형의 이미지가 지원되지 않을 수 있습니까? – cheese1756

답변

3

Picasa에서 가져온 이미지이므로 SD에 저장되지 않아 NullPointerException이 발생하는 문제가있었습니다.

intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true) 

갤러리에서 항목을 SD 카드의 항목으로 제한하기위한 활동을 시작하기 전에 설정할 수 있습니다. 내가 찾으면 더 나은 해결책을 게시 할 것입니다.

+0

나는 똑같은 질문에 직면 해있다. 해결책을 찾았 니? 정말 고마워. liang – Jacky

+0

불행히도, 나는 아직 더 나은 해결책을 모른다. 어쨌든 대부분의 사용자는 내 앱에서 원격 사진을 가져 오지 않으므로이 기능은 나를 위해 거래 차단기가 아닙니다 (아바타 이미지 용으로 사용하고 있습니다). Picasa 사진을 먼저 다운로드 한 다음 갤러리로 가져올 수는 있지만 꽤 많은 코드가 필요할 수 있습니다. 인터넷 검색을 통해 사용자가 이미지를 오래 누르고 "이미지 저장"을 선택하도록 지시 할 수도 있지만 이상적인 것은 아닙니다. 이게 도움이 되길 바란다. – cheese1756

관련 문제