zoukankan      html  css  js  c++  java
  • android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

      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);
        }
  • 相关阅读:
    后端架构师技术图谱
    互联网经典技术架构
    软件开发知识体系(二)
    软件开发知识体系(一)
    HSF源码剖析
    分库分表的几种常见形式以及可能遇到的难题
    iOS 关于MVC和MVVM设计模式的那些事
    MVC与MVP简单对比
    MVC、MVP、MVVM 模式
    Learning Android ActionBar
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/5610298.html
Copyright © 2011-2022 走看看