android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

  原方法:

    public static Bitmap getSmallBitmap(String filePath, int reqWidth, int reqHeight) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(filePath, options);        // Calculate inSampleSize        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);        // Decode bitmap with inSampleSize set        options.inJustDecodeBounds = false;        return BitmapFactory.decodeFile(filePath, options);    }

  异常:

06-23 11:41:04.817 24959-24959/com.test.tax E/AndroidRuntime: FATAL EXCEPTION: main                                                                Process: com.test.tax, PID: 24959                                                                java.lang.OutOfMemoryError                                                                    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)                                                                    at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:623)                                                                    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:599)                                                                    at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:378)                                                                    at com.test.tax.utils.PictureUtils.getSmallBitmap(PictureUtils.java:138)                                                                    at com.test.tax.utils.PictureUtils.bitmapToFile(PictureUtils.java:58)                                                                    at com.test.tax.utils.localalbum.ui.LocalAlbum.onActivityResult(LocalAlbum.java:141)                                                                    at android.app.Activity.dispatchActivityResult(Activity.java:5441)                                                                    at android.app.ActivityThread.deliverResults(ActivityThread.java:3353)                                                                    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3400)                                                                    at android.app.ActivityThread.access$1300(ActivityThread.java:141)                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1250)                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)                                                                    at android.os.Looper.loop(Looper.java:136)                                                                    at android.app.ActivityThread.main(ActivityThread.java:5047)                                                                    at java.lang.reflect.Method.invokeNative(Native Method)                                                                    at java.lang.reflect.Method.invoke(Method.java:515)                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)                                                                    at dalvik.system.NativeStart.main(Native Method)

  解决办法:

  通过设置BitmapFactory.Options属性解决

        options.inPreferredConfig = Bitmap.Config.RGB_565;        options.inDither = true;

  解决后的方法:

    public static Bitmap getSmallBitmap(String filePath, int reqWidth, int reqHeight) {        final BitmapFactory.Options options = new BitmapFactory.Options();        options.inJustDecodeBounds = true;        BitmapFactory.decodeFile(filePath, options);        // Calculate inSampleSize        options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);        // Decode bitmap with inSampleSize set        options.inJustDecodeBounds = false;        //避免出现内存溢出的情况,进行相应的属性设置。        options.inPreferredConfig = Bitmap.Config.RGB_565;        options.inDither = true;        return BitmapFactory.decodeFile(filePath, options);    }

 

更多相关文章

  1. Android三种方法实现事件监听
  2. 调用android的getColor()方法出现 java.lang.NoSuchMethodError:
  3. Android自适应不同版本的程序退出方法
  4. Android Studio报错:Unsupported method: AndroidProject.getPlug
  5. android中的ProgressBar的使用方法
  6. Some Android licenses not accepted. To resolve this, run: fl
  7. android 系统内存显示
  8. android去掉标题和状态栏的方法

随机推荐

  1. [Android] 一键修改从网上厨房制作的Andr
  2. Android之自动文本输入识别提示
  3. android 查看解压后的.xml文件代码(axmlpr
  4. AIR Native Extension的使用(Android)二
  5. Spring系列学习之Spring Android
  6. Android 系统数据库编程学习日志
  7. cross compile toolchain for arm/androi
  8. Android编译出现DSL element android.dat
  9. ArcGIS for Android离线数据编辑实现原理
  10. Android用户界面开发(10):Button