一张图片(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字节

 
 
减小图片内存的方式只有改变,图片的格式,缩减长宽,改变采样率:
 public static Bitmap getBitmapByPath(String path,int setWidth,int setHeight){
//创建一个空的Bitmap
Bitmap bitmap = null;
//获取Options对象
BitmapFactory.Options options = new BitmapFactory.Options();
//将inJustDecodeBounds属性设置为true,当inJustDecodeBounds属性为true的时候,BitmapFactory只会读取原始的宽高
//并不会真正的加载图片
options.inJustDecodeBounds = true;
//因为上边已经把inJustDecodeBounds属性设置为了true,所以这里不会真正的加载图片,只会读取原始的宽高
BitmapFactory.decodeFile(path, options);
//获取图片的原始高
int height =options.outHeight;
//获取图片原始的宽
int width = options.outWidth;
//声明一个原始的采样率
int getinSampleSize = 1;
//如果原始宽高大于目标宽高
if(height>setHeight || width>setWidth){
//取原始宽高的2/1
int halfHeight = height/2;
int halfWidth = width/2;
//根据条件来计算采样率
while ((halfHeight / getinSampleSize) >= setHeight && (halfWidth / getinSampleSize) >= setWidth) {
getinSampleSize *=2;
}
}
//将计算出来的采样率付给options.inSampleSize,使用使用计算出来的采样率
options.inSampleSize = getinSampleSize;
//将inJustDecodeBounds属性设置为false
options.inJustDecodeBounds = false;
//因为上边已经将inJustDecodeBounds属性设置为false,这里将真正的加载图片
bitmap = BitmapFactory.decodeFile(path,options);
return bitmap;
}

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

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

    Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面 ...

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

    通过Bitmap我们可以设计一个ImageLoader,实现应该具有的功能是: 图片的同步加载:图片的异步加载:图片的压缩:内存缓存:磁盘缓存:网络获取: 1.加载 首先提到加载:BitmapFact ...

  3. Android开发之高效加载Bitmap

    一.概述 在Android开发中,我们经常与Bitmap打交道,而对Bitmap的不恰当的操作经常会导致OOM(Out of Memory).这篇文章我们会介绍如何高效地在Android开发中使用Bi ...

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

    高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...

  5. Android开发艺术探索》读书笔记 (12) 第12章 Bitmap的加载和Cache

    第12章 Bitmap的加载和Cache 12.1 Bitmap的高速加载 (1)Bitmap是如何加载的?BitmapFactory类提供了四类方法:decodeFile.decodeResourc ...

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

    本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文. http://developer.android.com/training/displaying ...

  7. Android高效加载大图、多图解决方案,有效避免程序内存溢出现象

    好久没有写博客了,今天就先写一个小的关于在Android中加载大图如何避免内存溢出的问题. 后面会写如何使用缓存技术的核心类,android.support.v4.util.LruCache来加载图片 ...

  8. Bitmap的加载和Cache

    由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16M,这导致加载Bitmap的时候很容易出现内存溢出.比如以下场景: java.lang.OutofMemoryError: ...

  9. Android中一张图片加载后所占用内存大小的获取与测试

    Android程序中一旦加载的图片比较多,就有可能出现Out of Memory而导致程序崩溃.这个一方面是因为Android系统本身对于每个单独的进程有内存大小的限制(有16M,64M,128M,2 ...

随机推荐

  1. 禁止windows自动更新后重新启动

    运行gpedit.msc: 按照下图操作: 参考:http://www.xitongcheng.com/jiaocheng/win7_article_94.html

  2. 关于Mongodb RC的思考

    Mongodb Oplog 和 Journal log 的关系与执行顺序 就关系来说,op log实际上与数据是一致的概念. 但在有 RC的时候,执行顺序 w  j 的设置 如果不设置 j ,则默认是 ...

  3. centos下的安装mysql,jdk

    mysql: 如果你是用rpm安装, 检查一下RPM PACKAGE:rpm -qa | grep -i mysql如果mysql已经安装在本机,则会列出mysql安装过的文件 ,像mysql-ser ...

  4. memcached for .net on windows

    memcached for windowshttp://www.cnblogs.com/dudu/archive/2009/07/19/1526407.htmlhttp://www.cnblogs.c ...

  5. hdu-2680 Choose the best route---dijkstra+反向存图或者建立超级源点

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路 解题思路: 1.自己多加一个超级 ...

  6. JT∕T 905 -2014 出租汽车服务管理信息系统的相关协议研究

    出租汽车服务管理信息系统(JT∕T 905 -2014) 国家的相关技术要求2014年7月正式出台,总体有四部分,   第 1 部分:总体技术要求:   第 2 部分:运营专用设备:   第 3 部分 ...

  7. idea 创建springboot工程

    公司最近用springboot做微服务开发 1,使用idea创建一个spring initializr 工程 2,点击next 3,配置好后继续next 4,可以勾选上web,继续next 5,fin ...

  8. vi中系统剪切板的设置

    在vi中,如果编译时没有clipboard属性,将vi中的内容拷贝到系统剪切板有些麻烦.可以用如下的方法,查看vi 是否支持系统剪切板的功能: xt@xt-ThinkPad-X220:~$ vi -- ...

  9. [NOI2007]货币兑换Cash

    Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 6353  Solved: 2563[Submit][Status][Discuss] Descriptio ...

  10. python面试题Python2.x和Python3.x的区别

    所属网站分类: 面试经典 > python 作者:外星人入侵 原文链接: http://www.pythonheidong.com/blog/article/22/ 来源:python黑洞网 w ...