android中图片压缩过程中,获取bitmap时,OOM,怎么办?

图片在压缩过程中,OOM,bm = BitmapFactory.decodeFile(file.getPath(), opt); 是这一行报错,大神们帮忙想下办法吧,谢谢了!

BitmapFactory.Options opt = new BitmapFactory.Options();
// 这个isjustdecodebounds很重要
opt.inJustDecodeBounds = true;
Bitmap bm = BitmapFactory.decodeFile(file.getPath(), opt);

    // 获取到这个图片的原始宽度和高度
    int picWidth = opt.outWidth;
    int picHeight = opt.outHeight;
    // 获取屏的宽度和高度
    WindowManager windowManager = context.getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    int screenWidth = display.getWidth();
    int screenHeight = display.getHeight();

    // isSampleSize是表示对图片的缩放程度,比如值为2图片的宽度和高度都变为以前的1/2
    //opt.inSampleSize = 1;
    int a=0;
    // 根据屏的大小和图片大小计算出缩放比例
    if (picWidth > picHeight) {
        if (picWidth > screenWidth)
            //opt.inSampleSize = picWidth / screenWidth;
        a= picWidth / screenWidth;
    } else {
        if (picHeight > screenHeight)

            // opt.inSampleSize = picHeight / screenHeight;
        a = picHeight / screenHeight;

    }

    if(a<=0){a=3;}

    opt.inSampleSize = a;


    // 这次再真正地生成一个有像素的,经过缩放了的bitmap
    opt.inJustDecodeBounds = false;
    try {
        bm = BitmapFactory.decodeFile(file.getPath(), opt); 
        //压缩后的宽和高
        int w = bm.getWidth();
        int h = bm.getHeight();
        return bm;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

1个回答

opt.inPreferredConfig = Bitmap.Config.RGB_565;
加上这句试试.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android 中解决图片加载OOM 之 bitmap 压缩显示,压缩上传
java.lang.OutOfMemoryError OOM就是内存溢出,即Out Of Memory。也就是说内存占有量超过了VM所分配的最大。 现在的手机照相功能强大图片的大小往往达到好几兆,并且。android中处理图片的基础类是Bitmap,顾名思义,就是位图。占用内存的算法如:图片的width*height*Config。 如果Config设置为ARGB_8888,那么上面的Co
比较靠谱的Android图片压缩处理机制,防止OOM
以前找的一些图片的压缩的方法总是在米4的手机上出现OOM,最后找到了以下三种图片的压缩的方案结合起来使用,OOM的问题彻底解决了。 一、质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream();
android-----解决Bitmap内存溢出的一种方法(图片压缩技术)
我们在平常使用Bitmap的过程中经常会遇到OOM异常,为此困扰了我两三天时间,接下来把我自己的解决方法讲述一下:         首先来看看为什么使用Bitmap会导致OOM异常的,假如采用Bitmap来加载一个596KB(1920*1152)大小的图片,那么实际上在加载到内存中的时候占用空间的大小将不只是596KB那么大,具体多大呢?计算方法是:         图片的长度 * 图
如何理解与有效避免安卓加载Bitmap造成的OOM异常
结尾附加载Bitmap的方法 在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,移动设备会限制每个app所能够使用的内存,早期的一些版本可能是16MB,不同的设备有不同的大小,总之会有限制,不会让你无限制的使用。在andorid中图片加载到内存中是以位图的方式存储的,在android2.3之后默认情况下使用ARGB_8888,这种方式下每个像素...
bitmap的生成,以及引起的OOM问题总结
从文件或者资源中获取bitmap,为了尽可能的减少OOM的风险我们可以采取以下几个步骤         1.1  不获取bitmap内容,只获取bitmap的相关信息,这需要 设置 inJustDecodeBounds=true; /** * 不获取bitmap本身,直接获取bitmap信息 * @param res *
Android开发中解析、创建Bitmap对象时OOM的有效解决方法并附上一些干货
先来点鸡汤: Stay hungry,stay foolish 这句话的的解读:我们必须了解自己的渺小。如果我们不学习,科技发展的速度会让我们五年后被清空。所以,我们必须用初学者谦虚的自觉,饥饿者渴望的求知态度,来拥抱未来的知识。 这几天做的项目中需要从图库选择图片或者拍照生成图片,然后展现在IamgeView控件上。当然,从图库选择图片和拍照选择图片的功能实现起来很简单。直接写上代码: Cha
bitmap造成OOM异常的解决方法-(重要文档)
转自:http://www.chengxuyuans.com/Android/67950.html Android 图片加载Bitmap OOM错误解决办法 Android加载资源图片时,很容易出现OOM的错误。 因为Android系统对内存有一个限制,如果超出该限制,就会出现OOM。为了避免这个问题,需要在加载资源时尽量考虑如何节约内存,尽快释放资源等等。 Android系统
大量加大drawable下图片,导致OOM,使用二次裁剪
这个demo解决了由于大量使用大图片,导致极度不流畅,甚至OOM。使用了二次裁剪,进行图片压缩,减小内存的使用
关于bitmap加载图片产生OOM的一个解决方案
当我们使用bitmap加载一张图片时,如果图片比较大,而我们又不对图片做一下处理的话,很容易出现OOM(OutOfMemory内存溢出) 下面是我的一个解决方案,即对图片进行缩放,再显示出来 //从手机相册中加载一张图片到bitmap //cr是从手机相册中加载使用的ContentResolver ,uri是图片所在手机位置的uri public void getBitmap(Co
android--使用Canvas,Bitmap出现OOM-内存溢出
public class MyView {     private Canvas mCanvas;     private Bitmap mBitmap;     private static Bitmap mFreeBitmap;     static { mFreeBit
Android 大图压缩处理,避免OOM
一、遇到问题:      Android的开发的小伙伴在项目中有时遇到多张大图片的加载,图片的类型是多种多样,不同大小。但是大多数的图片都是高分辨率,总体来说,远远大于我们要展示的容器ImageView。有些就认为,图片的分辨率高和图片太大顶多就消耗更多流量而已,其实不是的,其实我们编程的运用程序是有内存限制的。程序的内存如果过高就会出现OOM异常。我们先在应用程序中编程以下代码,观察一下现象:
Drawable装Bitmap,防止OOM
我们通常在设置背景图片时直接用静态方法设置,但是当你设置的图片很大,而且经常性的切换时,这是反反复复的new ImageView就极易出现OOM,可用MAT对内存泄露的地方进行查看,这时我们就需要将Drawable图片转换成Bitmap格式,再动态进行设置: Resources r = getBaseContext().getResources(); Drawable d = r.getDraw
Andorid开发工具类之——BitmapUtils(压缩图片利器,告别oom,程序更快)
最近开发的一个项目使用到了图片加载上传和保存,由于是接受别人的做,也基本上做完了。但是程序已启动到需要加载图片上传到服务器的界面的时候内存就暴涨,虽然也没有oom,估计旧点的手机肯定会爆,只要不启动到图片加载的页面,内存基本上占用只用20+mb,选择图片后达到了80兆。这肯定是不行的,随后自己研究了几天,把有关上传和加载图片的代码全部推翻了,自己重写了一遍,现在基本上不管怎么加载图片也不会超过30
Android开发中使用 Bitmap.createBitmap() 函数出现java.lang.OutOfMemoryError错误
最近在开发一个应用的时候,使用了Bitmap的createBitmap()函数,在模拟器上运行的很好,可是到了真机上就出现了如下错误: AndroidRuntime: FATAL EXCEPTION: main Process: tob
关于android 使用bitmap的OOM心得和解决方案
android开发,从2010年开始学习到现在的独立完成一个app,这漫长的四年,已经经历了很多次bug的折磨,无数次的加班训练。然而,自以为自己已经比较了解android了,却最近在一个项目上,因为oom而折腾了一个周,回到原地,认识了自己的不足,感觉自己是如此的菜鸟呀。 好了,不废话,大家在使用开发android的时候,很少会注意或者意识到释放内存的重要性,因为大家在使用过程中,涉及的图片资
转 [Android] Bitmap OOM解决办法二
转 [Android] Bitmap OOM解决办法二 赞0 突然出现的Out Of Memory这个BUG导致我们项目中断了好几天,在经过不断地摸索之后,今天终于得到了解决。鉴于其强大的破坏力与多发性(尤其是当开发图形丰富的软件 时),在此将解决方法同大家分享,希望大家以后少走弯路,而本人水平有限,如有不当,还望指教! 那么,首先让我们来看看遇到这个BUG时系统
Android问题—Bitmap引起的OOM问题的解决办法
1.什么是OOM?为什么会引起OOM? 答:Out Of Memory(内存溢出),我们都知道Android系统会为每个APP分配一个独立的工作空间, 或者说分配一个单独的Dalvik虚拟机,这样每个APP都可以独立运行而不相互影响!而Android对于每个 Dalvik虚拟机都会有一个最大内存限制,如果当前占用的内存加上我们申请的内存资源超过了这个限制 ,系统就会抛出OOM错误!另外,这里
处理Bitmap出现oom的异常
图片大小: 直接使用ImageView显示bitmap会占用较多资源,特别是图片较大的时候,可能导致崩溃。 使用BitmapFactory.Options设置inSampleSize, 这样做可以减少对系统资源的要求。 属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。
Android图片工具类:获取Bitmap,压缩
Android图片工具类:获取Bitmap,压缩
BitmapFactory获取Bitmap图片以及解决OOM异常
提供一个获取Bitmap的工具类:package com.example.administrator.bitmapfactory;import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; i
Xutils之BitmapUtils使用
private void loadBitmap(){ BitmapUtils bitmapUtils = new BitmapUtils(this); // 加载网络图片,以下都可以配置BitmapDisplayConfig,BitmapLoadCallBack // bitmapUtils.display(imgView, "http://bbs.lidroid.com/static
处理getdrawable的方法引起的OOM异常
在将图片用getdrawable的方法转换成bitmap时会出现OOM,下面的方法就是怎么去避免因为这种操作或类似操作而引起的OOM。 public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,  int reqWidth, int reqHeight) { // First decod
手机在加载本地图片时,由于图片过大,加载的图片过多容易产生OOM现象的解决办法。
手机在加载本地图片时,由于图片过大,加载的图片过多容易产生OOM现象的解决办法。 1.首先如果在开发过程中需要加载大量的本地图片,可以让预览图加载缩略图,生成的是临时的缩略图,不会改变图片的质量。 2.生成缩略图的方法如下: /**      * 将本地图片转化为缩略图加载,以防止加载 的 OOM      */     public static void thumbleImages
android图片加载导致的OOM分析及有效解决办法(BitmapUtils)
android应用尤其是涉及到很多图片处理的经常会遇到OOM(Out Of Memory),为什么会导致OOM,又该如何解决呢?OOM原因分析:android每一个应用都有一个独立的进程,每个进程都是实例化了dalvik虚拟机实例的linux进程。Dalvik 主要管理的内存有 Java heap 和 native heap 两大块。Android系统对dalvik的vm heapsize作了硬性限
Android加载大图Bitmap发生OOM(Out Of Memmory Error)解决方案
Android加载大图Bitmap发生OOM(Out Of Memmory Error)解决方案 Android的内存管理机制对Bitmap比较敏感,并且Android对Bitmap的操作是基于native方法,当在应用中加载过大的Bitmap时候,很容易造成Android OOM(Out Of Memmory) Error,进而导致整个APP崩溃,调试还十分困难。 A
bitmap的六种压缩方式,Android图片压缩
bitmap的六种压缩方式,图片压缩 形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用的字节数以下是图片的压缩格式:其中,A代表透明度;R代表红色;G代表绿色;
Android Bitmap的缓存实现再也不怕ListView多图 oom了
一般网上Bitmap的缓存方法都是采用软引用的方式,其实还有更好的方法,这也是Google官方推荐的方法。废话不说,放代码。 import android.graphics.Bitmap; import android.support.v4.util.LruCache; /** * Created by Cying on 14-2-21. */ public class BitmapC
指定Uri文件图片进行压缩,如何避开OOM?
前言 图片压缩与二次采样 为什么要压缩图片?可以试想:当一个App调用系统的相机进行拍照操作时,如果我们从Intent中获取的data数据设置给图片时,它仅仅显示的是一张略缩图(120x160 宽高),并不能满足我们的需求!于是我们在startActivity()的时候putExtra()指定一个存储路径,获取Uri指定路径下的图片, 在config为ARGB_8888的情况下,每个像素要占用四个
android 压缩图片压缩到100K以下,并且宽高不超过1028
在android开发中,经常遇到图片压缩问题,由此记录下以下压缩方法。 import java.io.File; import java.io.FileOutputStream; import java.io.IOException;import android.annotation.SuppressLint; import android.graphics.Bitmap; import andro
Android图片压缩,不OOM,高保真度
Android图片压缩不OOM
使用Canvas、Bitmap时易犯的内存泄露问题
该篇文章解决了困扰了我几天的一个问题,特转载过来,希望能够帮助到更多的人,在原文的基础上略有修改。 原文地址:http://www.bangchui.org/read.php?tid=10013 你是不是在使用Bitmap的时候遇到了OOM异常? 你是不是觉得我对bitmap进行了recycle发现效果不是很明显,内存仍然是一路飙升? 好吧,那你就来对地方了!
Xamarin.Android OOM 思路整理 (BitmapFactory.DecodeByteArray)
起因:之前在工程中整合Android-Universal-Image-Loader框架,运行的时候确老是抛OOM异常,怀疑是UIL框架OOM问题,搞了一个星期,还是百思不得其解 思路:测试UIL框架,发现几十M的图和几K的图片没有任何区别,程序照旧会崩掉          初步排除UIL框架OOM异常问题          还有什么地方用到了图片方式呢?          发现程序代码用到
通过BitmapFactory.decodeByteArray把byte[]转成Bitmap出现的OOM的解决方法
在自定义照相中,由于返回的 Bitmap mBitmap2 = BitmapFactory.decodeByteArray(data, 0, data.length)
Android高效压缩图片不失真的方法总结
前言 之前有个项目我负责聊天模块,做到图片消息那一块时,因为需要先上传到服务器然后取得返回的图片网络地址,考虑到无论是从相机拍摄还是从相册上传的图片,都有可能由于过大从而导致发送消息耗时过长以及损耗用户手机流量,所以需要在上传前对图片进行有效的压缩,网上提供的做法有许多种,经过反复试验,我总结出了以下影响图片大小的几个因素以及对应的属性和方法: 1.图片的尺寸,对应BitmapFactory.
Android 实现上传本地图片并实现压缩(避免OOM),支持长按删除
2018,新年快乐,作为开年的第一篇博客,今天来一篇Android上传图片的功能,毕竟这个是大部分的app都有的功能 。今天正好有空,就来记录一下,方便以后再次使用… GIF原图如下: 个人觉得,如果博客没有效果图来说事,说什么都是白说。。。OK,这个就是最终的实现效果了,接下来就看看具体的实现思路: 首先,想要实现这个功能,需要使用到网格加载控件GridView来加载选择的图片,并且还需要通
Android Bitmap大量使用不产生OOM之使用缓存机制
加载一张图到你的界面,很轻松。但是,如果是在一瞬间要加载很多图的情况呢?比方说像listview、gridview、或者viewpager。或许你已经想到了,是的,用我上篇讲到Android Bitmap大量使用不产生OOM之多线程并发加载Bitmap的处理方式。虽然上篇能解决一瞬间加载很多图片,但是,这样一来不是每次都在请求数据吗?当我把一部分items滑出了界面,这部分加载的bitmap就没用了
解决Bitmap中的OOM问题
http://lcd.yesky.com/imagelist/2009/315/qwm3qsg1r0l9.jpg  这张网络图片非常大,如果直接用BitmapFactory.decodeStream(new URL(url).openStream())的话就会出现OOM问题,采用以下方法可以有效解决此问题的发生 package com.test.bitmap; import java.io.I
android通过相册获取图片oom的问题
前言出来混,迟早是要还的。前段时间项目多,时间紧,博客就搁置。有时候自己很奇怪,做android开发也有几个年头了。为什么还在写这些基础的东西,为什么不去研究当前很热的技术?首先可能是以前自己给自己留了很多坑,其次,在叼在复杂的框架其根本原理还是离不开基础的,就像程序无非是数据+算法。当然新的技术也肯定是不能落下的。发现问题一般app都会有上传图片业务,而上传图像的途径无非是从相册选取,或直接拍照。
Android Bitmap 优化- 图片压缩
原文地址:http://anany.me/2015/10/15/bitmap1/ 一直以来Bitmap都是开发中很棘手的问题,这个问题就是传说中的OOM(java.lang.OutofMemoryError - 内存溢出),那么Bitmap为何如此丧失,令无数Android开发者所懊恼? 一、Bitmap引发OOM的原因 由于每个机型在编译ROM时都设置了一个应用堆内
android使用luban压缩图片
今天我们就来使用luban工具将原图片压缩之后分图片质量依然保持不变的方法,我相信这个方法一定能满足你。本文章讲解的是单选图片,而不是批量添加图片
相关热词 c# 中文ascii c#电话客服 c#开发管理系统实例 c#三个条件判断 c# mvc过滤器 c# 鼠标缩放图像 c# 空间后方交会 c#串口测试应用程序 c# 匹配 正则表达式 c#防止窗体重绘