android图片内存的计算

一.图片分辨率

图片的分辨率指图片中存储的信息量,是指每英寸图像内的像素点数,例如:1024x1024的图片所包含的像素点数为1024x1024

二 .图片占用内存

android有四种色彩模式加载图片

1. ALPHA_8:每个像素点占用1byte内存
2. ARGB_4444:每个像素点占用2byte内存
3. ARGB_8888: 每个像素点占用4byte内存
4. RGB_565: 每个像素点占用2byte内存

所以理论上计算公式如下:

所占内存 = 图片长度 * 图片宽度 * 每个像素所占的内存

三.实际验证

从网上找了两张图片:一张200x200,一张512x512
代码很简单,如下:


package com.example.cheng.bitmapdemo;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;public class MainActivity extends ActionBarActivity {private TextView sizeTxt;private ImageView imageView;private Button button;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initViews();//init();}private void initViews(){sizeTxt = (TextView)findViewById(R.id.sizeTxt);imageView = (ImageView)findViewById(R.id.image);button = (Button)findViewById(R.id.startBtn);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {init();}});}private void init(){
/**        BitmapFactory.Options options = new BitmapFactory.Options();options.inPreferredConfig = Bitmap.Config.ARGB_8888;options.inSampleSize = 2;**/Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(),R.drawable.i200_200);imageView.setImageBitmap(bitmap);sizeTxt.setText("size:" + bitmap.getRowBytes() * bitmap.getHeight());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

按照公式计算这张图片所占的内存大小为:512x512x4 = 1048576
但是实际情况却等于4196304,整整大了四倍。开始怀疑是公式的问题,用MAT分析了一下内存情况,发现图片在转换成Bitmap对象之后,尺寸变成了1024*1024,


所以实际占用内存为1024x1024x4 = 4194304,后来在代码中加了句

Log.v("TAG","width:"+bitmap.getWidth()+",height:"+bitmap.getHeight());


至于为什么要这样做,可以参考这篇文章:
http://blog.csdn.net/bigconvience/article/details/27054639

后面我又尝试了下压缩这张图片,看所需要的内存是否会减少,结果发现内存并没有减少,原理压缩图片并不会减少内存的占用,但是可以减少apk包的大小。

Android图片内存的计算相关推荐

  1. Android App加载图片内存空间计算

    图片内存 图片占用内存空间大小都很熟悉:分辨率 * 像素点大小 图片占用内存空间大小和 图片分辨率,像素点大小 有关 1.图片格式,图片文件大小和占用内存空间大小无关 png / jpg 只是这张图片 ...

  2. Android 图片内存占用过大?不存在的...

    转载请注明出处:http://blog.csdn.net/hjf_huangjinfu/article/details/79281829 概述 Android 平台的内存,一直都是比较珍贵的,防止内存 ...

  3. android 图片内存缓存文件在哪个文件夹,别再用手机管家清理内存了!1分钟删掉这些文件夹,内存多出几个G...

    原标题:别再用手机管家清理内存了!1分钟删掉这些文件夹,内存多出几个G 你的手机内存还剩多少G?我们在使用手机时,都会产生大量的缓存数据,如果不定期清理,就会积少成多,导致手机内存空间爆满. 你有定期 ...

  4. 【Android 内存优化】Bitmap 内存占用计算 ( Bitmap 图片内存占用分析 | Bitmap 内存占用计算 | Bitmap 不同像素密度间的转换 )

    文章目录 一.Bitmap 内存占用 二.Bitmap 内存占用计算示例 三.Bitmap 内存占用与像素密度 四.Bitmap 内存占用与像素密度示例 一.Bitmap 内存占用 在 Android ...

  5. android 图片占用内存的计算

    Android高效内存1:一张图片占用多少内存 在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用.而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存 ...

  6. Android 图片压缩、内存计算

    前言 再平时开发中肯定都会用到图片相关知识,而平时大多都只会关注实现方面,但一些理论对于面试和更深入高级实现就很有用,比如很多第三方组件很多都已经实现,本篇文章先从图片加载内存计算.图片压缩.图片另存 ...

  7. Android加载图片内存溢出问题解决方法

    这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...

  8. Android 图片缓存之内存缓存技术LruCache,软引用

    Android 图片缓存之内存缓存技术LruCache,软引用

  9. android 图片与内存加载

    尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过ja ...

最新文章

  1. 微调torchvision 0.3的目标检测模型
  2. Android Loader机制全面详解及源码浅析
  3. Python闭包与装饰器
  4. mysql索引及sql执行顺序
  5. Linux debian安装Typora教程
  6. mysql uroot p 报错,MySQL链接错误集。
  7. [CQOI2015]选数
  8. switch的对象不能为null
  9. 谭浩强c语言指针讲稿,谭浩强c语言教程 指针.ppt
  10. C语言知识点--define的替换列表为空是怎么回事?
  11. linux下查看巨杉数据库,SequoiaDB巨杉数据库入门:快速搭建流媒体服务器
  12. 解读ConnectBot-1 telnet、ssh常识
  13. Saliency as Evidence: Event Detection with Trigger Saliency Attribution 论文解读
  14. N个实用的css代码
  15. 神经官能症虽属常见病,烦起来真要命
  16. Web.config详解+asp.net优化
  17. mysql-基础-视图,存储过程,触发器
  18. Linux内核的VGA模式对照表
  19. Oracle优化培训笔记-第一节
  20. 向丹:科技巨头争抢的“超级账本”到底是个什么组织?

热门文章

  1. 视图的作用是什么?有哪些好处?(面试题)
  2. 2023最新语音直播多人连麦社交APP源码+支持双端/附编译安装说明
  3. PIX学习路径-1-选择PIXHAWK作为飞控学习的起点
  4. 迷宫寻宝(自编简单版)
  5. linux用户密码转换为明文,Linux strace 明文密码抓取
  6. 多线程操作同一个变量
  7. 数据挖掘:数据(数据的基本统计描述)
  8. C++ 使用命令行编译程序
  9. ubuntu云输入法ibus cloud pinyin
  10. mysql DateDiff 时间差