重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

android图片内存,android图片内存中

Android 中图片的内存大小计算

我们都知道颜色经常用ARGB来表示,A表示Alpha,即透明度;R表示red,即红色;G表示green,即绿色;B表示blue,即蓝色。Bitmap的色彩也是用ARGB来表示的

业务包括:企业网站建设、手机网站开发、商城网站建设、网站营销推广等服务,并且涵盖域名申请、虚拟空间、云服务器、等互联网基础服务;创新互联联建站以互联网的创新理念,成熟完善的建站体系,开拓进取的精神,专业的解决方案和顾问咨询服务,帮助客户在互联网时代提升形象、把握商机、实现价值,提高企业的核心竞争力。

我们都知道在Android 中,图片最终是一bitmap 的方式表示,那么Android中,一张图片的内存大小改怎么计算呢,首先我们了解几个概念

弄清了这几个概念,那么我们就可以计算不同图片格式的的内存占用大小,假设有一张480x800的图片

四个格式下所占的内存如下

那么在图片占用空间上,按照上面的理解,是不是说图片分辨率一样,所占的内存空间就是一样呢?

其实,如果要理解这个问题,我们其实要了解图片占用的硬盘空间和内存空间两个概念

那么这个是怎么得来的呢? 按照内存大 计算方式,分辨率一样,占用的大小应该是一样的,为什么图片一和图片二 同样都是1920 * 1080 的图片,占用硬盘空间差异这么大, 图片一占用到1.25M 图片二占用268K,这是为什么呢,影响愿意有二.

ok,本篇文章完

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图片内存优化

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

安卓手机照片有10几MB

1、不同的手机、不同的像素、不同的设置,乃至同一部手机在同一个设置下、拍摄不同的场景,都可能导致照片大小不一样。

2、这个跟你的手机照相机图片质量设置有关,所以安卓手机照片在10MB完全在正常范围之内,照片越清晰占得内存就越大。

android照片像素很小但内存很大

文件的大小不一样,是因为属性不同

1.压缩格式不一样,压缩算法不同。比如JPG文件就比较小,BMP文件就非常大。JPG是压缩比最好的图片格式之一。

2、压缩质量不一样。同样是JPG,压缩质量也是有区别的。可以选择10%的压缩质量,效果非常差,但90%的质量,几乎和不压缩一样。一般,JPG的压缩比在70%以上,就和原图的差距不大。

像素就相当于人的个子。两个人个子一样高,说明不了什么,可能性别都不一样。图片也是一样,像素只是画面的大小,其它方面,完全是另一回事。

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,所以实际内存还是减少了。


分享标题:android图片内存,android图片内存中
文章链接:http://cqcxhl.cn/article/dsgijps.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP