Android之Bitmap 高效加载

一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数


图片格式(Bitmap.Config


一张100*100的图片占用内存的大小


ALPHA_8


图片长度*图片宽度


100*100=10000字节


ARGB_4444


图片长度*图片宽度*2


100*100*2=20000字节


ARGB_8888


图片长度*图片宽度*4


100*100*4=40000字节


RGB_565


图片长度*图片宽度*2


100*100*2=20000字节

减小图片内存的方式只有改变,图片的格式,缩减长宽,改变采样率:

 1 public static Bitmap getBitmapByPath(String path,int setWidth,int setHeight){
 2             //创建一个空的Bitmap
 3             Bitmap  bitmap = null;
 4             //获取Options对象
 5             BitmapFactory.Options options = new BitmapFactory.Options();
 6             //将inJustDecodeBounds属性设置为true,当inJustDecodeBounds属性为true的时候,BitmapFactory只会读取原始的宽高
 7             //并不会真正的加载图片
 8             options.inJustDecodeBounds = true;
 9             //因为上边已经把inJustDecodeBounds属性设置为了true,所以这里不会真正的加载图片,只会读取原始的宽高
10             BitmapFactory.decodeFile(path, options);
11             //获取图片的原始高
12             int height =options.outHeight;
13             //获取图片原始的宽
14             int width = options.outWidth;
15             //声明一个原始的采样率
16             int getinSampleSize = 1;
17             //如果原始宽高大于目标宽高
18             if(height>setHeight || width>setWidth){
19                 //取原始宽高的2/1
20                 int halfHeight = height/2;
21                 int halfWidth = width/2;
22                 //根据条件来计算采样率
23                 while ((halfHeight / getinSampleSize) >= setHeight && (halfWidth / getinSampleSize) >= setWidth) {
24                     getinSampleSize *=2;
25                 }
26             }
27             //将计算出来的采样率付给options.inSampleSize,使用使用计算出来的采样率
28             options.inSampleSize = getinSampleSize;
29             //将inJustDecodeBounds属性设置为false
30             options.inJustDecodeBounds = false;
31             //因为上边已经将inJustDecodeBounds属性设置为false,这里将真正的加载图片
32             bitmap = BitmapFactory.decodeFile(path,options);
33             return bitmap;
34         }
时间: 2024-08-01 10:42:18

Android之Bitmap 高效加载的相关文章

Android艺术——Bitmap高效加载和缓存代码分析(2)

Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面是一个实例: public static int calculateInSampleSize(              BitmapFactory.Options options, int reqWidth, int reqHeight) {      // Raw height and widt

Android艺术——Bitmap高效加载和缓存(1)

通过Bitmap我们可以设计一个ImageLoader,实现应该具有的功能是: 图片的同步加载:图片的异步加载:图片的压缩:内存缓存:磁盘缓存:网络获取: 1.加载 首先提到加载:BitmapFactory类提供了四类方法:decodeFile.decodeResource.decodeStream和decideByteArray.分别是文件系统.资源.输入流和字节数加载Bitmap对象. 2.压缩 如何进行图片的压缩?首先我们为什么图片压缩呢?因为很多时候ImageView尺寸小于图片原始尺寸

Android高效加载大图、多图解决方案,有效避免程序OOM(转)

本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/training/displaying-bitmaps/index.html 高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨

Android 高效加载大图片避免OOM

参考链接:http://blog.csdn.net/coderinchina/article/details/40964205 我们项目中经常会加载图片,有时候如果加载图片过多的话,小则导致程序很卡,重则OOM导致App挂了,今天翻译https://developer.android.com/training/displaying-bitmaps/index.html,学习Google高效加载大图片的方法. 图片有各种形状和大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统

Android 高效加载大图,多图解决方案,有效避免程序OOM

高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是用手机摄像头拍出来的,这些图片的分辨率会比我们手机屏幕的分辨率高得多.大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常.我们可以通过下面的代码看出每个应用程序最高可用内存是多少. [java] view plaincopy in

Android 基础 十二 Bitmap的加载和Cache

本章的主题是Bitmap的加载和Cache,主要包含三个方面的内容.首先讲述如何有效地加载一个Bitmap,这是一个很有意义的话题,由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16MB,这导致Bitmap加载的时候很容易出现内存溢出.下面这个异常信息在开发中应该经常遇到: 因此如何高效的加载Bitmap是一个很重要也很容易被开发者或忽视的问题. 接着介绍Android中常用的缓存策略,缓存策略是一种通用的思想,可以用在很多场景中,但是实际开发中经常需要用Bitmap

第12章 Bitmap的加载和Cache

高效加载 BitmapFactory类提供四种方法: decodeFile:从文件,间接调用decodeStream decodeResource:从资源,间接调用decodeStream decodeStream:输入流 decodeByteArray:字节数组中 使用BitmapFactory.options按一定采样率来加载缩小后图片来避免OOM. public class ImageResizer { private static final String TAG = "ImageRes

Bitmap的加载与Cache(一)

如何有效的加载一个bitmap,由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16MB,这就导致加载Bitmap的时候很容易出现内存溢出. 因此,如何高效的加载bitmap是一个很重要也很容易被开发者忽略的问题. Bitmap的高效加载: 如何加载一张图片呢?BitmapFactory类提供了四类方法:decodedFile,decodedResource,decodedStream和decodedByteArray,分别用于支持文件系统,资源,输入流以及字节数组中加

Bitmap 的加载和 Cache

Android 中如何高效地加载 Bitmap 是一个很重要也很容易被我们忽视的问题. Bitmap 的高效加载 BitmapFactory 类提供了:decodeFile.decodeResource.decodeStream.decodeByteArray 以及 decodeFileDescriptor 等几类方法来加载一个 Bitmap 对象. 高效加载 Bitmap 的核心思想就是设置 BitmapFactory.Options 的 inSampleSize 采样率属性来加载所需尺寸的图