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);
        }
  • 相关阅读:
    观《phonegap第三季 angularjs+ionic视频教程 实时发布》学习笔记(一)
    npm的本地模式与全局模式
    Nodejs的Express完成安装指导
    app安装位置声明
    vs2005水晶报表无法运行在X64机器上
    SQL递归查询(with cte as)
    System.IO.File.Create 不会自动释放,一定要Dispose
    imail 删除历史邮件命令
    Deferred解决JS同步问题
    HttpContext.Current.Cache使用文件依赖问题
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/5610298.html
Copyright © 2011-2022 走看看