android:java.lang.OutOfMemoryError: bitmap size exceeds VM budget---缩略图

基于MATLAB的基本数字调制解调系统的设计 基于MATLAB的基本数字调制解调系统的设计一、摘要现代通信系统要求通信距离远、通信容量大、传输质量好,作为其关键技术之一的调制解调技术一直是人们研究的一个重要方向。本文以MATLAB为软件平台,充分利用其提供的通信工具箱和信号处理工具箱中的模块,对数字调制解调系统进行Simulink设计仿真,并且进行误差分析。调制与解调是通信系统中十分重要的一个环节,针对不同的信道环境选择不同的调制与解调方式可... 阅读详情

 

原出处:http://2711082222.blog.163.com/blog/static/10630224920123635918767/

这一个没测试,想来必定能运行。分享和自己学习。

当图片过大,或数量较多时使用BitmapFactory解码图片会出java.lang.OutOfMemoryError: bitmap size exceeds VM budget

android系统中读取位图Bitmap时.分给虚拟机中图片的堆栈大小只有8M。所以不管是如何调用的图片,太多太大虚拟机肯定会报那个错误。


遇到这个问题是因为没有回收资源.
public void distoryBitmap(){ 
    if(null!=bmb&&!bmb.isRecycled()) 
        bmb.recycle();

}

public class GifView extends View implements Runnable { 
    private Bitmap bmb; 

    public GifView(Context context, InputStream inputStream) {
         super(context);
         distoryBitmap();
         bmb = BitmapFactory.decodeStream(is);
     }
 }

调用上面的代码可以基本解决这个问题.但是千万不要在view中的onDraw()中调用.因为onDraw()方法是系统循环调用.只要图片打开.

系统就不停的调用该方法.

最好的解决方案是在自定义的View中添加一个init()初始化方法的头部调用.或者在构造函数的顶部调用:

来自:http://www.apkbus.com/android-1179-1-1.html


当图片过大,或数量较多时使用BitmapFactory解码图片会出java.lang.OutOfMemoryError: bitmap size exceeds VM budget.

一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4。

要想正常使用则需分配更少的内存,具体的解决办法是修改采样值BitmapFactory.Options.inSampleSize。

 

修改采样值BitmapFactory.Options.inSampleSize,例如: 
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);


设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);

设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。

查看Android源码,Android提供了一种动态计算的方法,方法如下面例子

private static int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels)

public static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels)

 

使用该算法,就可动态计算出图片的inSampleSize。

BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeFile(imageFile, opts);

opts.inSampleSize = computeSampleSize(opts, -1, 128*128);
opts.inJustDecodeBounds = false;
try {
 Bitmap bmp = BitmapFactory.decodeFile(imageFile, opts);
 imageView.setImageBitmap(bmp);
    } catch (OutOfMemoryError err) {
}

 来自:http://blog.youkuaiyun.com/yangxyjd/article/details/6932989


我的应用 eg.

public static final Bitmap getFitBitmap(String path)
    {                
   BitmapFactory.Options opts =  new  BitmapFactory.Options();      
   opts.inJustDecodeBounds =  true ;
   BitmapFactory.decodeFile(path, opts);                      
  
   opts.inSampleSize = computeSampleSize(opts, - 1 ,  1200*800 );    
   Log.e("bili", opts.inSampleSize+"");
   opts.inJustDecodeBounds =  false ; 
        try  {
             Bitmap bmp = BitmapFactory.decodeFile(path, opts);
             return bmp;
   }  catch  (OutOfMemoryError err) {
   
   }
        return null;        
    }
 
 public static int computeSampleSize(BitmapFactory.Options options,     int minSideLength, int maxNumOfPixels) {
        int initialSize = computeInitialSampleSize(options, minSideLength,maxNumOfPixels);
        int roundedSize;
        if (initialSize <= 8 ) {
            roundedSize = 1;
            while (roundedSize < initialSize) {
                roundedSize <<= 1;
            }
        } else {
            roundedSize = (initialSize + 7) / 8 * 8;
        }
        return roundedSize;
    }

    private static int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) {
        double w = options.outWidth;
        double h = options.outHeight;

        int lowerBound = (maxNumOfPixels == -1) ? 1 :
                (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
        int upperBound = (minSideLength == -1) ? 128 :
                (int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength));

        if (upperBound < lowerBound) {
            // return the larger one when there is no overlapping zone.
            return lowerBound;
        }

        if ((maxNumOfPixels == -1) &&
                (minSideLength == -1)) {
            return 1;
        } else if (minSideLength == -1) {
            return lowerBound;
        } else {
            return upperBound;
        }
    }

      /**
       * change uri to path string
       * @param uri
       * @return
       */
      public String getPath(Uri uri)  
       {    
          String[] projection = {MediaStore.Images.Media.DATA };    
          Cursor cursor = managedQuery(uri, projection, null, null, null);    
          int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);    
          cursor.moveToFirst();    
          return cursor.getString(column_index);    
       }

调用:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) 中

Uri uri1 = data.getData();  
String selectedImagePath1 = getPath(uri1);   

//.......... 
//firstPhoto.setImageURI(uri1);     
//firstPhoto.setImageBitmap(BaseMean.lessenUriImage(selectedImagePath1)); 
btOne =RevoPubAccess.getFitBitmap(selectedImagePath1);

红色处要是添加这句,

Log.e(TAG,  uri1+";;;;"+selectedImagePath1+",,,,"+uri1.getPath()); 

结果如下:
content://media/external/images/media/149;;;;/mnt/sdcard/DCIM/100MEDIA/IMAG0238.jpg,,,,/external/images/media/149

YOLOv8【第十二章:数据增强与数据工程篇·第10节】主动学习(Active Learning):如何挑选最有价值的样本进行标注! 🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。 阅读详情

相关推荐

aarch64环境安装minio

1.去官网查看最新版本2.使用命令安装,采取wget和dnf安装wgetminio.rpmdnfdnfdnfdnf。

Myuanforever的博客 2180

VMware虚拟机卡顿解决方法

在使用cadence时,放大缩小很容易卡顿,浪费大量时间,可尝试以下方法解决: 1.打开虚拟机,点“虚拟机”,点“设置” 2.选项-高级-勾选“禁用内存页面修整”,确认保存 3.打开“我的电脑”,进入此目录“C:\ProgramData\VMware\VMware Workstation”(如果找不到,应该是被隐藏了,点击“查看”-勾选“隐藏的项目”) 4.打开此目录下“settings.ini” 5.添加如下代码“mainMem.useNamedFile = “FALSE””,保存关闭,重启虚拟机

include_6666的博客 1万+

PTA-浙大版 《Python程序设计》 第三章编程题目及答案

博主第一次写优快云的博客,所以排版上可能有些不尽人意,代码部分均为自己的思路,可能复杂或者考虑欠妥,欢迎大家一起讨论~ 第一题:大于身高的平均值 这里用了np数组求得平均数,当然for循环累加也是可以的 import numpy as np data = input().split() data = list(map(int,data)) avg = np.mean(data) for i in data: if i > avg: print(i,end = '

Legendwqs的博客 1万+

优化提高VMware虚拟机运行速度的技巧(详细图文教程)

vmware虚拟机如何设置不当的话会造成运行速度慢,并影响主机运行,甚至会出现死机。以下是提高vmware虚拟机运行速度的几个技巧,1        修改preference中的选项(全局设置)a         进入设置界面的方法如下图所示:这步也是关键步骤之一,否则也会因为读硬盘而导致虚拟机速度明显下降(同时硬盘狂叫,读硬盘是虚拟机速度慢的主要原因)。选中“Fit all virtual ma...

guanyi的博客 2万+

国宇测试盒GH7009 SPI读操作全解析:从接线到代码实现的避坑指南

本文详细解析了国宇GH7009测试盒进行SPI读操作的完整流程与避坑要点。重点阐述了硬件连接中IO2时序控制引脚的关键作用,提供了从接线方案、电源处理到上位机代码实现的实战指南,并针对常见的数据不稳定、特定寄存器读取失败等问题给出了具体解决方案。

dapp9builder的博客 223

Waymo数据集里的隐藏彩蛋:5个激光雷达数据融合实战(附Python代码)

本文深入解析Waymo数据集中5个激光雷达的数据融合技术,提供Python实战代码,帮助开发者掌握多传感器协同工作的关键方法。通过时间同步、坐标转换和运动补偿等技术,实现高精度3D场景重建,提升自动驾驶系统的环境感知能力。

weixin_30399821的博客 80

Vmware虚拟机的高级应用窥探

[color=#FF4500]本文已发表至***手册2008.05期上,后经作者提交至个人博客([url]www.mymines.cn[/url]),转载请务必保留此信息。[/color][separator]还是在黑手的2008.02期上,我曾写了一篇Windows下Vmware虚拟机简单应用的文章,而且我在最后提到了希望自己能再写一篇更深入的文章让大家继续了解Vmware...

weixin_34034670的博客 431

盘点军工行业软件研发的那些常用GJB标准

GJB5000、2786、438、141、102、8114等...

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 9443

VMWare Workstation 9.0.1 官方安装版+汉化包补丁

VMWare Workstation 9 最新功能: 根据Vmaware 官方介绍,VMWare 8具备超过50项新功能,能极大改变我们的工作方式和虚拟机体验,还能通过云服务为你节省时间。下面是其主要改进: 全新用户界面:VMware Workstation完全更新了用户界面,简化菜单,可实时显示虚拟机缩略图,改进了用户偏好设置界面。增加一个全新的“虚拟机库”。 更好的远程连接访问:用户可在

轨 迹 4927

ZEMAX学习第7天-手机镜头光学系统设计全过程案例

接下来对系统微调,依次缩小CRA和畸变,首先对CRA进行依次递减(39°、38°、37°、36°、35°),目前CRA角度40度,每次下降一度进行优化,利用MAXX加OPLT一起控制,控制小于35°。可以看出在标注的三个地方镜头曲率变化,导致PY=1的光线走向奇特,因此需要对矢高进行调整,按照标注的地方依次调整(从右到左)至传函变好,越靠近右边对其余视场影响越小。3.圆锥系数值较大,透镜形状怪异;一、第1,3镜子偏厚,第4镜子偏薄,45镜子间隔边缘偏小,第5片镜子中心厚度与边缘厚度相差较大,需要控制;

liningliwei的博客 1067

越野换了逐飞的ips200pro的屏幕后代码烧录中报错: “Cannot initialize device connection” 和 “Flashing failed” ...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1150

VM虚拟机卡顿 vmrare卡顿

1、主机配置不高(无解,非要解决-&gt;升级配置) 2、给虚拟机分配的配置过低或过高(适中就好) 3、有分页选项在执行(大量的物理硬盘IO导致卡顿!) 3、电脑装了360之类的安全软件(这个最难排查),本人亲身经历,装了360之后关闭开机自启(实际还有防护进程在自启),可能就是个中的一些问题导致的,具体待研究,打开360使其处于运行状态或者彻底卸载360之后解决。...

xianglin1998的博客 2148

uniapp - 详细手机端h5网页调用手机摄像头进行二维码识别扫描,在uniapp的H5移动端微信网页平台中,在浏览器中调用手机扫码功能详细教程,识别二维码并获取扫描结果(完整示例源码,一键复制即用

uniapp,h5,手机端网页,H5手机网页,uniapp开发h5实现扫码功能,uniapp微信h5网页扫码sdk使用教程,uniapp h5网页如何实现浏览器扫码,uniapp扫码功能怎么兼容h5_uniapph5怎么做扫码功能,uniapp的手机网页如何实现扫二维码一维码,浏览器H5实现js扫码,H5调用摄像头和扫一扫功能,亲测可用,H5调用本地摄像头实现扫一扫,uni-h5项目解决扫码功能,uniapp实现微信H5扫码,解决uniapp在H5端使用不能扫码问题,uni-app的h5扫码(二维码、条形码

✅ 精选推荐文章 1万+

(java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决)android中将网络图片转化为缩略图...

[转]java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法 最近在做电信的一个视频地图项目时,需要获取网络图片预览,用到图片缩略图技术,通过参考了很多同行的方法,本人写了以下获取网络图片缩略图的代码,如有不妥,望高手指正,谢谢。以下是实现方法:     获取缩略图关键代码     byte[] ima...

flycomos_lee的博客 126

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java.lang.OutOfMemoryError: bitmap size exceeds VM budget

使用android提供的BitmapFactory解码一张图片时,有时会遇到该错误,即:java.lang.OutOfMemoryError: bitmap size exceeds VM budget。这往往是由于图片过大造成的。要想正常使用,一种方式是分配更少的内存空间来存储,即在载入图片的时候以牺牲图片质量为代价,将图片进行放缩,这也是不少人现在为避免以上的OOM所采用的解决方法。但是,这种

Android 840

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android 图片大小超过预算的VM:java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Android 2.3.3 Eclipse Version: 3.7.0 LogCat Activity显示图片,部分源代码: // 图片 try { bitmap = BitmapFactory.decodeFile("/" + sdpath + htc.getBitmap(), opt); }

DebugLog的专栏 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法

在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图...

xiechengfa的技术笔记 187

android BitmapFactory的OutOfMemoryError: bitmap size exceeds VM budget解决方案

使用android提供的BitmapFactory解码一张图片时,有时会遇到该错误,即:java.lang.OutOfMemoryError: bitmap size exceeds VM budget。这往往是由于图片过大造成的。要想正常使用,一种方式是分配更少的内存空间来存储,即在载入图片的时候以牺牲图片质量为代价,将图片进行放缩,这也是不少人现在为避免以上的OOM所采用的解决方法。但是,这种

StoneNotes的专栏 849

安卓图片内存溢出java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法

在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原

smilesea1988的专栏 611

Android 图片OutOfMemory异常bitmap size exceeds VM budget的原因及解决方法

主要介绍Android图片oom问题的原因及解决方法,顺带提及Dalvik heap size。 1、现象 很多朋友应该都碰到过下面这个异常 Java 1234567891011121314151617FATAL EXCEPTION: mainjava.lang.OutOfMemoryError: bitmap size exceeds VM bud

吴小博的博客 448

[转载]java.lang.OutOfMemoryError: bitmap size exceeds VM budget解决方法

在开发图片浏览器等软件是,很多时候要显示图片的缩略图,而一般情况下,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原...

weixin_33971130的博客 82
上一篇: android 获取网络状态和设置网络
下一篇: Android 关于长按back键退出应用程序的实现
onlywaitforyou
博客等级 码龄15年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值