Android图片占用内存全面分析
发布时间:2023-02-20 01:05:38
标签:Android,图片,占用内存
曾经有一个朋友问过我一个问题, 一张512*512 150KB PNG格式图片和一张512*512 100KB 压缩比是8的JPG格式的图片,加载到内存中,也就是加载到一个Bitmap中,哪个占用的内存大? 这个问题似乎有点难回答,测试一下就知道了.
好了,按照要求我准备了三张图片,
1. 512*512px, 114KB, PNG
2. 512*512px, 138KB, JPG ,压缩比 12
3. 512*512px, 57KB, JPG,压缩比 8
接下来是写一个Demo,一个Bitmap加载不同的图片,然后使用bitmap.getRowBytes() * bitmap.getHeight();得到图片的内存占用情况.(这么简单的程序就不放出来献丑了)
得到的数字居然都是一样的. 刚好是4MB,为什么是4MB? 512*512*4*2,这么算出来的,Bitmap默认加载使用ARGB_8888,每个像素会占用4byte,因为每个像素有两个Chanel.
所以说, Android图片占用内存大小只 和 图片分辨率(像素)及色彩模式有关系.可以参考Bitmap源代码
/**
* Each pixel is stored on 4 bytes. Each channel (RGB and alpha
* for translucency) is stored with 8 bits of precision (256
* possible values.)
*
* This configuration is very flexible and offers the best
* quality. It should be used whenever possible.
*/
今天终于解开了我心里的一个结,以前总以为加载越大的图片就会占用得越多.
PS:难道Bitmap渲染是使用OpenGL的吗?在Debug中看到了以下信息:
这是后来我加载了一张数码相机拍的照片后看到的.


猜你喜欢
- Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebW
- 使用ManagedWifi查看当前Wifi信号并选择wifiusing System;using System.Collections.Ge
- Java执行hadoop的基本操作实例代码向HDFS上传本地文件public static void uploadInputFile(Str
- 本文实例讲述了Java Web实现session过期后自动跳转到登陆页功能。分享给大家供大家参考,具体如下:通过过滤器的方式实现 sessi
- 之前知道spring支持JSR校验,在自己定义的bean中加入@NotNull,@NotBlank,@Length等之类的校验用于处理前台传
- 首先利用IDEA创建Maven工程项目1.选择新建项目2.选中Maven骨架3.填写项目名称和项目位置4.Finsh之后默认打开的是pom.
- —学习并使用mybatis-plus的一些高级功能的用法例如: AR模式、 乐观锁 、逻辑删除 、自动填充、数据保护等功能为了方便演示,咱们
- 1.下载文件,将文件保存到本地。(只试用excel);2.对文件的标题进行检验;3.获取导入的批次(取一个表的一个值,加1);4.循环获取文
- 鉴于各种复杂的网络环境,笔者决定采用不同的编程接口进行下载尝试,以增加程序的可用性。这里仅介绍使用 WebClient 的方法,后续的文章会
- 一、OpenCV OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库,是一个基于C与C++的跨平台计算机视觉处
- 上一集中我们说到需要用Java来制作一个知乎爬虫,那么这一次,我们就来研究一下如何使用代码获取到网页的内容。首先,没有HTML和CSS和JS
- Android中的异步消息机制分为四个部分:Message、Handler、MessageQueue和Looper。其中,Message是线
- 先给大家展示下效果图,如果大家感觉不错,请参考实现代码。思路1.下角Button的父View加入一个FrameLayout,也就是图中全屏透
- Java停止线程的逻辑(协同、通知)在Java程序中,我们想要停止一个线程可以通过interrupt方法进行停止。但是当我们调用interr
- 概述:@ResponseBody @RequestMapping(value="/download/{fileName:[a-zA
- springboot项目main函数启动在controller包下新建appController类package controller;im
- 本文实例讲述了Java编程中文件读写的方法。分享给大家供大家参考,具体如下:Java中文件读写操作的作用是什么?回答这个问题时应该先想到的是
- 编写程序,利用continue语句实现循环体过滤器,过滤“老鹰”字符串,并做相应的处理,但是放弃continue语句之后的所有代码。即若遇到
- 本文实例为大家分享了Android自定义开关的具体代码,供大家参考,具体内容如下以 ToggleColorY 为例分析, ToggleIma
- 背景:本人不是Java开发人员,经过四年多的历练,可以说是一枚BI攻城师了吧,最近粗糙的写了一个Portal来集成cognos报表,下面就入