android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法
16lz
2021-01-23
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); }
更多相关文章
- Android三种方法实现事件监听
- 调用android的getColor()方法出现 java.lang.NoSuchMethodError:
- Android自适应不同版本的程序退出方法
- Android Studio报错:Unsupported method: AndroidProject.getPlug
- android中的ProgressBar的使用方法
- Some Android licenses not accepted. To resolve this, run: fl
- android 系统内存显示
- android去掉标题和状态栏的方法