Android图片内存的计算
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图片内存的计算相关推荐
- Android App加载图片内存空间计算
图片内存 图片占用内存空间大小都很熟悉:分辨率 * 像素点大小 图片占用内存空间大小和 图片分辨率,像素点大小 有关 1.图片格式,图片文件大小和占用内存空间大小无关 png / jpg 只是这张图片 ...
- Android 图片内存占用过大?不存在的...
转载请注明出处:http://blog.csdn.net/hjf_huangjinfu/article/details/79281829 概述 Android 平台的内存,一直都是比较珍贵的,防止内存 ...
- android 图片内存缓存文件在哪个文件夹,别再用手机管家清理内存了!1分钟删掉这些文件夹,内存多出几个G...
原标题:别再用手机管家清理内存了!1分钟删掉这些文件夹,内存多出几个G 你的手机内存还剩多少G?我们在使用手机时,都会产生大量的缓存数据,如果不定期清理,就会积少成多,导致手机内存空间爆满. 你有定期 ...
- 【Android 内存优化】Bitmap 内存占用计算 ( Bitmap 图片内存占用分析 | Bitmap 内存占用计算 | Bitmap 不同像素密度间的转换 )
文章目录 一.Bitmap 内存占用 二.Bitmap 内存占用计算示例 三.Bitmap 内存占用与像素密度 四.Bitmap 内存占用与像素密度示例 一.Bitmap 内存占用 在 Android ...
- android 图片占用内存的计算
Android高效内存1:一张图片占用多少内存 在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用.而在App中,大部分内存可能被我们图片占用了,所以减少图片的内存 ...
- Android 图片压缩、内存计算
前言 再平时开发中肯定都会用到图片相关知识,而平时大多都只会关注实现方面,但一些理论对于面试和更深入高级实现就很有用,比如很多第三方组件很多都已经实现,本篇文章先从图片加载内存计算.图片压缩.图片另存 ...
- Android加载图片内存溢出问题解决方法
这篇文章主要介绍了Android加载图片内存溢出问题解决方法,本文讲解使用BitmapFactory.Options解决内存溢出问题,需要的朋友可以参考下 1. 在Android软件开发过程中,图片处 ...
- Android 图片缓存之内存缓存技术LruCache,软引用
Android 图片缓存之内存缓存技术LruCache,软引用
- android 图片与内存加载
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,最终都是通过ja ...
最新文章
- 微调torchvision 0.3的目标检测模型
- Android Loader机制全面详解及源码浅析
- Python闭包与装饰器
- mysql索引及sql执行顺序
- Linux debian安装Typora教程
- mysql uroot p 报错,MySQL链接错误集。
- [CQOI2015]选数
- switch的对象不能为null
- 谭浩强c语言指针讲稿,谭浩强c语言教程 指针.ppt
- C语言知识点--define的替换列表为空是怎么回事?
- linux下查看巨杉数据库,SequoiaDB巨杉数据库入门:快速搭建流媒体服务器
- 解读ConnectBot-1 telnet、ssh常识
- Saliency as Evidence: Event Detection with Trigger Saliency Attribution 论文解读
- N个实用的css代码
- 神经官能症虽属常见病,烦起来真要命
- Web.config详解+asp.net优化
- mysql-基础-视图,存储过程,触发器
- Linux内核的VGA模式对照表
- Oracle优化培训笔记-第一节
- 向丹:科技巨头争抢的“超级账本”到底是个什么组织?