android内存图片,android 图片内存优化
android 图片占用内存大小怎么计算
1、将图片转化为缩略图再加载:代码如下 1 BitmapFactory.Options options = new BitmapFactory.Options();2 options.inSampleSize = 2;3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);该段代码即是读取1.png的缩略图,长度、宽度都只有原图片的1/2。图片大小减少,占用的内存自然也变小了。这么做的弊端是图片质量变差,inSampleSize的值越大,图片的质量就越差。由于各手机厂商缩放图片的算法不同,在不同手机上的缩放图片质量可能会不同。笔者就遭遇过moto手机上图片缩放后质量可以接受,三星手机上同样的缩放比例,质量却差很多的情况。2、用ARBG_4444颜色模式加载图片:Android中有四种,分别是:ALPHA_8:每个像素占用1byte内存ARGB_4444:每个像素占用2byte内存ARGB_8888:每个像素占用4byte内存RGB_565:每个像素占用2byte内存Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。代码如下 1 BitmapFactory.Options options = new BitmapFactory.Options();2 options.inPreferredConfig = Bitmap.Config.ARGB_4444; 3 Bitmap img = BitmapFactory.decodeFile("/sdcard/1.png", options);以上代码即是将1.png以ARGB_4444模式读出。内存减少虽然不如第一种方法明显,但是对于大多数图片,看不出与ARGB_8888模式有什么差别。不过在读取有渐变效果的图片时,可能有颜色条出现。另外,会影响图片的特效处理。3、调用图片的recycle()方法:这个其实不是真正降低图片内存的方法。主要目的是标记图片对象,方便回收图片对象的本地数据。图片对象的本地数据占用的内存最大,而且与程序Java部分的内存是分开计算的。所以经常出现Java heap足够使用,而图片发生OutOfMemoryError的情况。在图片不使用时调用该方法,可以有效降低图片本地数据的峰值,从而减少OutOfMemoryError的概率。不过调用了recycle()的图片对象处于“废弃”状态,调用时会造成程序错误。所以在无法保证该图片对象绝对不会被再次调用的情况下,不建议使用该方法。特别要注意已经用setImageBitmap(Bitmap img)方法分配给控件的图片对象,可能会被系统类库调用,造成程序错误。4、使用Matrix对象放大的图片如何更改颜色模式:虽然使用Matrix对象放大图片,必定会耗费更多的内存,但有时候也不得不这样做。放大后的图片使用的ARGB_8888颜色模式,就算原图片是ARGB_4444颜色模式也一样,而且没有办法在放大时直接指定颜色模式。可以采用以下办法更改图片颜色模式。代码如下 Matrix matrix = new Matrix();float newWidth = 200;//图片放大后的宽度float newHeight = 300;//图片放大后的长度matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);//得到放大的图片img2 = img1.copy(Bitmap.Config.ARGB_4444, false);//得到ARGB_4444颜色模式的图片img = null;img1 = null;这里比起原来的图片额外生成了一个图片对象img1。但是系统会自动回收img1,所以实际内存还是减少了。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站设计、蔡家坡网络推广、小程序制作、蔡家坡网络营销、蔡家坡企业策划、蔡家坡品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供蔡家坡建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com
[img]Android性能优化(八)--Android图片内存优化
2个基本原则
既然需要的内存公式已得到,那优化就显而易见了,无非就是减小的这三个参数的值,具体的策略如下:
这里我们将图片分为2种情况来探讨:
图片占用的内存 大小为:
为什么mipmap不在这种情况的考虑范围之内呢?
因为mipmap是Android系统为了避免Launcher Icon变形而添加的资源目录,也就是说,mipmap中的图片不会被缩放。所以Google也不推荐将除Launcher Icon之外的图片放在mipmap目录中。
本地图片通常都是通过Android提供的BitmapFactory来加载的, 这里看几个常用的API:
图片的优化可通过Options参数来实现(Options的介绍可参考 从fresco 看图片优化 :
inPreferredConfig的取值为Bitmap.Config类型(这里只考虑以下几种情况),它是一个枚举类型,用来设置每个像素需要的字节数:
1.jpeg和gif
2.webp
3.png8, png24, png32
网络图片通常我们都是使用开源库进行加载, 所以不需要拿到Bitmap再进行缩放或裁剪。
这时可让后台实现网络图片的裁剪,即:根据图片的请求参数返回合适的尺寸,最大也只需要控件的大小即可。
再大也没意义,不仅浪费流量,还占用内存。
如果你的APP中有很多图片,那么可对图片的宽高根据设备的内存情况进行适当的缩小:
尽量为所有分辨率创建资源 资源匹配分辨率 = 减少不必要的缩放,从而提高UI绘制效率
对于一个多图片的APP来说,图片所占内存的优化是一项必不可少的工作。
总的来说,其优化也就是通过 缩放 和指定 Bitmap.Config的值 来实现的,只是不同位置,不同格式的图片有所差异而已。
;utm_source=weixinqun
android 图片占用内存与什么有关
在开发手机应用的时候,内存是有限的,那使用的时候,就要合理的运用和释放。
那么最占用内存的,估计也是就图片了,有时候,需要在加载一些大量的图片。但是,往往回报内存溢出的错误。看看图片的大小呢,也
不大,也就20KB左右,为什么还是很占内存呢?
原来,将图片转成bitmap 来使用的时候,图片所占的内存,不是它原来的大小,是与 图片的宽度,高度,和颜色深度有关系。
图片实际占用的内存大小 = width * height * 颜色深度
颜色深度:
Bitmap.Config ALPHA_8
Bitmap.Config ARGB_4444
Bitmap.Config ARGB_8888
Bitmap.Config RGB_565
A R G B
透明度 红色 绿色 蓝色
其实这都是色彩的存储方法:我们知道ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue,其实所有的可
见色都是右红绿蓝组成的,所以红绿蓝又称为三原色,每个原色都存储着所表示颜色的信息值
Bitmap.Config ARGB_4444 每个像素 占四位
Bitmap.Config ARGB_8888 32 每个像素 占八位
Bitmap.Config RGB_565 16 R占5位 R占6位 B占5位 没有透明度(A)
说白了就ALPHA_8就是Alpha由8位组成
ARGB_4444就是由4个4位组成即16位,
ARGB_8888就是由4个8位组成即32位,
RGB_565就是R为5位,G为6位,B为5位共16位
由此可见:
ALPHA_8 代表8位Alpha位图
ARGB_4444 代表16位ARGB位图
ARGB_8888 代表32位ARGB位图
eg: 一张20KB的图片,宽1024(px)*高1024(px)*图片的颜色模式,就是它所占的真实的内存。
android 怎样把图片保存到手机内存中
手机内存和内存卡区别说到底都是路径不同而已,图片保存时把路径改一下就行了
分享标题:android内存图片,android 图片内存优化
文章出自:http://ybzwz.com/article/dsopdei.html