转载 Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget

当图片过大,或图片数量较多时使用BitmapFactory解码图片会出java.lang.OutOfMemoryError: bitmap size exceeds VM budget,要想正常使用则需分配更少的内存,具体的解决办法是修改采样值BitmapFactory.Options.inSampleSize,例如:

BitmapFactory.Options opts
= new BitmapFactory.Options();
opts.inSampleSize
= 4;
Bitmap bitmap
= BitmapFactory.decodeFile(imageFile, opts);

如何设置恰当的inSampleSize

设置恰当的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提供了一种动态计算的方法。

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;
}
}



使用该算法,就可动态计算出图片的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) {
}



另外,可以通过Bitmap.recycle()方法来释放位图所占的空间,当然前提是位图没有被使用。

转载于:https://www.cnblogs.com/xiao0/archive/2011/09/13/2174399.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Juniper Firewall多进单出配制实例

Technorati 标签: juniper,多进单出,配置实例,firewallJuniper firewall多進單出配置。想法是這樣的用一台firewall將這幾條ISP線路都接入&#xff0c;再通過一個trunk口出來&#xff0c;通過一台L2 switch劃分出幾個VLAN&#xff0c;分別對應不同的ISP線路。這樣做的好處就不多…

php js 复选框选中,为每个选中的复选框显示相同的一组问题。 (PHP和JS / Jquery)...

你可以这样做&#xff0c;它可以帮助你......HTMLfunction show_ques() {var i $(this).attr(id).substr(-1);if ($(this).is(":checked")) {//get total count of question listvar nQue $("#quelist").find("div[class^que]").length;var is…

刷题≠学好数学,近百位名校名师告诉你,数学是怎么学好的?

▲ 点击查看 数学是个神奇的科目&#xff0c;它存在着一种“梯次掉队”的现象。不是说你低年级的知识学好了&#xff0c;高年级的知识就一定能学好。相信大家都有这种体会&#xff1a;一二年级孩子成绩不相上下&#xff0c;但到三四年级的时候&#xff0c;有一批学生的数学成绩…

android 系统之ContentProvider

基于上一篇的数据库操作&#xff0c;又写了一个ContentProvider的示例。把SQLiter 的数据提供出去供别的项目进行访问。 这一篇的代码要求熟悉SQLiter 的API. 首先&#xff0c;我们编写一个类extents ContentProvider &#xff0c;重写他的方法。 URI 在http 中我们称为统一资源…

你是中层管理者?嗯,一个表面看似风光,实际却很 “鸡肋” 的重要岗位

这是头哥侃码的第246篇原创每年的六七月份&#xff0c;上海都会进入梅雨季节。这段时期的上海天气就好比大小姐的脾气&#xff0c;阴晴不定&#xff0c;完全看心情做事&#xff0c;心情好的时候&#xff0c;给你个阳光&#xff0c;让你的生活和休闲时光多一些灿烂&#xff0c;心…

20150203一些移动端H5小bug解决

都是一些我也不知道为什么会有的bug。 1. 在三星note2&#xff0c;小米2&#xff0c;页面加载后&#xff0c;页面有黑块. 那么提高被盖住的部分z-index。 2. iphone5 &#xff0c;ios7.0.4&#xff0c;上文字显示不出 那么就先hide&#xff0c;setTimeout几百毫秒再show

重温SQL——行转列,列转行(转:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html)...

行转列&#xff0c;列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现&#xff0c;也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。 用传统的方法&#xff0c;比较好理解。层次清晰&#xff0c;而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法…

php正则获取标签,PHP通过正则匹配中文字符 过滤html标签 获取文本内容

正则匹配中文汉字根据页面编码不同而略有区别&#xff1a;GBK/GB2312编码&#xff1a;[x80-xff] 或 [xa1-xff]UTF-8编码&#xff1a;[x{4e00}-x{9fa5}]/u[php]$str "账单123";//GBK/GB2312使用&#xff1a;preg_match_all("/[\x80-\xff]/", $str, $chines…

python监控机票价格_喜欢旅行又怕吃土?让Python来爬取最便宜机票吧!

图源&#xff1a;videoblocks.com你喜欢旅行吗&#xff1f;这个问题通常会得到一个肯定的答案&#xff0c;随后引出一两个有关之前冒险经历的故事。大多数人都认为旅行是体验新文化和开阔视野的好方法。但如果问题是“你喜欢搜索机票的过程吗&#xff1f;”也许话题就到此为止了…

伤不起的指针

虽然知道怎么做&#xff0c;但是还是做一遍啦。结果调试了两个多小时&#xff0c;真崩溃。 /* * * * Filename: intlist.h * * Description: * * Version: 1.0 * Created: 09/16/2011 02:56:13 AM * Revision: none * Compiler: gc…

[禅悟人生]尊严非席, 不可卷起

日本江户时期是一个社会很不稳定的时期&#xff0c;浪人武士依仗强力横行无忌。 有一个著名的茶师跟随着一个显赫的主人。 有一天主人要去京城办事&#xff0c;舍不得离开茶师&#xff0c;就说&#xff0c;你跟我去吧&#xff0c;好每天给我泡茶。茶师很害怕&#xff0c;对主人…

要男女朋友有什么用?

1 题&#xff1a;我不要面子的嘛&#xff01;2 狗都有人给撑伞了。。3 这大概就是传说中的一见钟情吧4 5 南方人说话有多软糯6 男女朋友有什么用你点的每个赞&#xff0c;我都认真当成了喜欢

低代码应用创新成果——轴承行业数字化智造系统(含MES/ERP/WMS)

轴承是当代机械设备中一种不可或缺的零部件&#xff0c;广泛应用于汽车、铁路车辆及各类工业机械和家用电器等国民经济的重要领域&#xff0c;是一种节约能源、提高效率的伟大发明。轴承行业作为装备制造业的先锋&#xff0c;一直以来都走在数字化转型的前列&#xff0c;引领行…

城管威逼交警“让老百姓笑话”

城管威逼交警“让老百姓笑话” 发表时间:2010-07-05 09:15:42 来源&#xff1a;新华每日电讯我说两句(加入讨论) “给我们车贴罚单&#xff0c;你是不是不想干了&#xff1f;咱都是执法的&#xff0c;这一整&#xff0c;不让老百姓笑话吗&#xff1f;”这是沈阳市一位城管对正…

重点客户销售数据分析python_药品销售数据分析--python

一、数据分析的目的数据分析是指用适当的统计分析方法对收集来的大量数据进行分析&#xff0c;提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。本篇文章中&#xff0c;假设以朝阳医院2018年销售数据为例&#xff0c;目的是了解朝阳医院在2018年里的销售情况&…

C#类与结构体究竟谁快——各种函数调用模式速度评测

以前我一直有个疑惑——在C#中&#xff0c;究竟是类&#xff08;class&#xff09;比较快&#xff0c;还是结构体&#xff08;struct&#xff09;比较快&#xff1f;当时没有深究。 最近我遇到一个难题&#xff0c;需要将一些运算大的指针操作代码给封装一下。原先为了性能&…

HelloSilverlight

一&#xff1a;输入姓名并选中一个日期&#xff0c;将在下面显示 二:XAML代码 <UserControl x:Class"HelloSilverlight.MainPage"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2…

Building a Space Station--POJ 2031

1、题目类型&#xff1a;计算几何&#xff0c;最小生成树。 2、解题思路&#xff1a;&#xff08;1&#xff09;获得所有点路径长度的矩阵map[][]&#xff1b;&#xff08;2&#xff09;利用Prim算法求解最小生成树。 3、注意事项&#xff1a;数学操作&#xff0c;中间值全部用…

21世纪7大数学难题,解决其中一个你就成为了百万富翁!

全世界只有3.14 % 的人关注了爆炸吧知识百万富翁你也可以昨天一大早&#xff0c;知识君就收到模友送的3枝红玫瑰。仔细一看&#xff0c;原来又是来跟知识君约稿的。。。知识君只能说&#xff1a;1900年&#xff0c;希尔伯特&#xff08;传送门&#xff09;在巴黎国际数学家代表…

在 Azure VM 上使用 Jitsi 搭建私人视频会议

点击上方蓝字 / 关注“汪宇杰博客”原文&#xff1a;Azure Tips And Tricks翻译&#xff1a;汪宇杰私人视频会议市面上有许多视频会议应用程序&#xff0c;例如 Zoom、Microsoft Teams 和 Skype。有时&#xff0c;您需要自己的服务&#xff0c;以让自己更安全并在自己的公司内部…