2013-06-27 70 views
1

我正在設計一個顯示一些圖像的活動。下面的代碼獲取圖像文件並將它們放到屏幕中。Android BitmapFactory.decodeFile skia錯誤

 for(int i=0;i<photoPaths.size();i++){ 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize = 4; 
      //Bitmap bm= BitmapFactory.decodeFile(new File(photoPaths.get(i)).getAbsolutePath()); 
      Bitmap bm= BitmapFactory.decodeFile(new File(photoPaths.get(i)).getAbsolutePath()); 
      int imageH=bm.getHeight(); 
      int imageW=bm.getWidth(); 
      ImageView image=new ImageView(this); 
      image.setImageBitmap(bm); 
      int padding=10; 
      image.setPadding(0, padding, padding, 0); 
     } 

該代碼運行良好,同時放置5張照片。當他們在第六次放置代碼失敗後。

這裏是logcat的消息:

 06-27 11:13:13.202: D/skia(17373): --- decoder->decode returned false 
     06-27 11:13:13.202: D/AndroidRuntime(17373): Shutting down VM 
     06-27 11:13:13.202: W/dalvikvm(17373): threadid=1: thread exiting with uncaught exception (group=0x4142c2a0) 
     06-27 11:13:13.202: E/AndroidRuntime(17373): FATAL EXCEPTION: main 
     06-27 11:13:13.202: E/AndroidRuntime(17373): java.lang.OutOfMemoryError 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:652) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:391) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:451) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at .PhotoGallery.onCreate(PhotoGallery.java:94) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.Activity.performCreate(Activity.java:5188) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.ActivityThread.access$700(ActivityThread.java:140) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.os.Handler.dispatchMessage(Handler.java:99) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.os.Looper.loop(Looper.java:137) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at android.app.ActivityThread.main(ActivityThread.java:4921) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at java.lang.reflect.Method.invokeNative(Native Method) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at java.lang.reflect.Method.invoke(Method.java:511) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
     06-27 11:13:13.202: E/AndroidRuntime(17373):  at dalvik.system.NativeStart.main(Native Method) 

我怎樣才能解決這個問題?

回答

3

你錯過的options對象傳遞給decodeFile:

Bitmap bm= BitmapFactory.decodeFile(new File(photoPaths.get(i)).getAbsolutePath(), options); 
0
06-27 11:13:13.202: E/AndroidRuntime(17373): FATAL EXCEPTION: main 
    06-27 11:13:13.202: E/AndroidRuntime(17373): java.lang.OutOfMemoryError 

你跑出來的內存。你需要減少應用程序的內存使用量。請注意,如果圖像相當大(例如30 + MB),則它可能對內存太多。

相關問題