Android有效的治疗方法Bitmap,减少内存
Android有效的治疗方法Bitmap,减少内存
照片可能有不同的大小。
在很多情况下,大小。比如,我们的Camera应用,我们所拍的照片的大小远大于屏幕显示的大小
假如你的应用被限制了内存使用,显而易见,你会选择载入一个低分辨率的图片。这张低分辨率的图片应该匹配屏幕的尺寸。更高分辨率的图像没有提供不论什么可见的优点,但仍占用宝贵的内存。并且因为额外的动态缩放。会带来额外的性能开销。
本篇文章教你通过载入一个小尺寸的图片样本,来修饰一张大图,而且没有超过应用的内存限制。
原文地址http://wear.techbrood.com/training/displaying-bitmaps/load-bitmap.html
获取图片的类型尺寸
每种解码方法都有一些标识位,你能够通过配置BitmapFactory.Options这些标识位来实现。设置inJustDecodeBounds的属性为true的时候,我们解码的时候不分配内存。返回的Bitmap为null,可是我们设置了outWidth,outHeight和outMimeType。这样的技术能够预先获取到Bitmap的大小数据和类型数据。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.myimage, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
为了避免java.lang.OutOfMemory exceptions,在解码图片之前。预先检查Bitmap的大小,除非你有绝对的把握你的bitmap有合适的大小,而且在内存大小限制范围之内。
载入缩放的图片到内存
- 预计载入整个图像所占用的内存
 - 你能够接收的内存使用量和你程序能够使用的内存
 - 你放该图片的ImageView的尺寸或者其它UI组件的尺寸
 - 屏幕的大小
 
比如。我们不值得将大小为1024x768 pixel的图片放到128*96 pixel的缩略图控件(ImageVIew)里面。
比如,我们想把一张2048*1536的图片解码为仅仅有1/4大小的图片512*384,载入到内存里卖年仅仅有0.75MB的大小,远远小宇原图12MB的大小(使用ARGB_8888通道的图片)。
这里有一种计算样本图片的方法。依据目标图片的宽度和高度width和height:
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { final int halfHeight = height / 2;
final int halfWidth = width / 2; // Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) > reqHeight
&& (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
} return inSampleSize;
}
Note: A power of two value is calculated because the decoder uses a final value by rounding down to the nearest power of two, as per the inSampleSize documentation.
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) { // First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options); // Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); // Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
这样的方法能够帮助我们轻松有效的载入一张100*100的缩略图片:
mImageView.setImageBitmap(
decodeSampledBitmapFromResource(getResources(), R.id.myimage, 100, 100));
BitmapFactory.decode* asneed。
有几种从以下android Developer通过上面的翻译,我觉得非常有用。添加注意它。(*^__^*)
 嘻嘻
Android有效的治疗方法Bitmap,减少内存的更多相关文章
- Android开发优化之——对Bitmap的内存优化
		
http://blog.csdn.net/arui319/article/details/7953690 在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitm ...
 - 解析Android开发优化之:对Bitmap的内存优化详解
		
在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...
 - android app性能优化大汇总(内存性能优化)
		
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
 - 对Bitmap的内存优化
		
在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常.所以,对于图 ...
 - 【转】Android开发之Bitmap的内存优化详解
		
本文来源:转载自: http://mobile.51cto.com/abased-410796.htm 在Android应用里,最耗费内存的就是图片资源.而且在Android系统中,读取位图Bitma ...
 - Android性能优化:谈话Bitmap内存管理和优化
		
最近除了那些忙着项目开发的事情,目前正在准备我的论文.短的时间没有写博客,今晚难得想总结.只要有一点时间.因此,为了凑合用,行.唠叨罗嗦,直接进入正题. 从事Android自移动终端的发展,想必是常常 ...
 - android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法
		
android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...
 - android bitmap的内存分配和优化
		
首先Bitmap在Android虚拟机中的内存分配,在Google的网站上给出了下面的一段话 大致的意思也就是说,在Android3.0之前,Bitmap的内存分配分为两部分,一部分是分配在Dalvi ...
 - Android笔记--Bitmap(二)内存管理
		
Bitmap(二) 内存管理 1.使用内存缓存保证流畅性 这种使用方式在ListView等这种滚动条的展示方式中使用最为广泛, 使用内存缓存 内存缓存位图可以提供最快的展示.但代价就是占用一定的内存空 ...
 
随机推荐
- uva 1393 - Highways(容斥原理)
			
题目连接:uva 1393 - Highways 题目大意:给定一个m∗n的矩阵,将矩阵上的点两两相连,问有多少条直线至少经过两点. 解题思路:头一次做这样的题目,卡了一晚上. dp[i][j]即为i ...
 - android传感器;摇抽奖功能
			
package com.kane.sensortest; import java.util.Random; import android.hardware.Sensor; import android ...
 - 《Linux Device Drivers》第十六章 块设备驱动程序——note
			
基本介绍 块设备驱动程序通过主传动固定大小数据的随机访问设备 Linux核心Visual块设备作为基本设备和不同的字符设备类型 Linux块设备驱动程序接口,使块设备最大限度地发挥其效用.一个问题 一 ...
 - html/css获得第一章
			
1.基本教程来学习 大概3天课余时间阅读下面的两个教程. HTML文字教程 CSS文字教程 2.练习 看完教程后.做第一练习时,总结例如以下: 1)div居中 须要设置属性:margin-left:a ...
 - UiAutomator喷射事件的源代码分析
			
上一篇文章<UiAutomator源代码分析之UiAutomatorBridge框架>中我们把UiAutomatorBridge以及它相关的类进行的描写叙述,往下我们会尝试依据两个实例将这 ...
 - Android ImageView分析并展开
			
版本号:1.0 日期:2014.6.11 2014.6.12 版权:© 2014 kince 转载注明出处 ImageView是开发中经常使用到的一个控件,也能够说是不可缺少的. 对于它的使用. ...
 - 二维码简单Demo
			
二维码简单Demo 一.视图 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name=&qu ...
 - 错误21002:[SQL-DMO]用户"xxx"已经存在
			
原文:错误21002:[SQL-DMO]用户"xxx"已经存在 转载自:http://topic.csdn.net/u/20120829/09/faf381b6-d4e9-4f97 ...
 - 创建您自己的Maven模板
			
相关链接: http://maven.apache.org/archetype/maven-archetype-plugin/ 一.事实上Maven的模板也是一个maven项目,所以我们首先要生成一个 ...
 - Android 按下电源按钮关闭小学习过程的整个长度
			
Android 按下电源按钮关闭小学习过程的整个长度 近期研究了一下android关机跟又一次启动功能,看了一些长按电源键到弹出关机对话框,到真正关机的一系列处理过程. 首先还是来看看这个长按电源键都 ...