1. Bitmap (API使用)

android里面的bitmap中,一个像素点需要4个byte去表示,这是因为android表示颜色是" argb ";其中 a 表示是透明度,然后是" rgb"

颜色表示范围 ~~~ffffffff

2. 加载图片到内存:

上面说到了图形表示使用4byte,和int一样,所以Android里面每个像素点都是使用一个int来表示的。

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.girl);
iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bitmap);

2. 加载大图片到内存:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.very_large_phone);
iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap(bitmap);

这里的图片very_large_phone非常大,1.69M(2560*1504);

那么这个图片在Android中需要2560*1504*4 = 15400960 byte才能表示这张图片,结果或出现OOM(OUT OF MEMONY)内存溢出的错误。

说明Android显示图片不是看图片自身的大小,而是看分辨率。

那么Android该怎么显示大图片(大分辨率)?

//为了避免oom异常,根据屏幕的尺寸对图片进行缩放

//1.先获取手机屏幕的宽和高

WindowManager  wm = (WindowManager)getSystemService( WINDOW_SERVICE );

int  screenWidth  =  wm.getDefaultDisplay().getWidth();

int  screenHeight = wm.getDefaultDisplay().getHeight();

//2.获取图片的宽和高

BitmapFactory.Options  opts = new Option();//创建一个配置参数

opts.inJustDecodeBounds = true;//表示不真实地解析这个位图,只是解析位图的宽高信息(不申请空间解析这个图片,自然没有内存溢出)

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.very_large_phone,opts);

int  width = opts.outWidth ;

int  height = opts.outHeight ;

//3.计算缩放的比例

int scale = 1;

int scaleX = width  / screenWidth;

int scaleY = height / screenHeight;

if(scaleX > scaleY && scaleY >1 ) {

     scale = scaleX ;

}

if(scaleY> scaleX && scaleX  >1 ) {

               scale = scaleY ;

}

//4.根据缩放比例,真实解析位图

opts.inSampleSize = scale;

opts.inJustDecodeBounds = false;//真实地解析这个位图,返回bitmap;

 bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.very_large_phone,opts);//缩放后的bitmap

iv.setImageBitmap(bitmap);

最新文章

  1. C# log4net输出发生错误的行号
  2. Microsoft Azure News(5) Azure新DV2系列虚拟机上线
  3. UITextView 文本垂直居中
  4. vue.js 简单入门
  5. SaveData Functions
  6. poj 2240 Arbitrage
  7. JavaScript中的Get和Set访问器
  8. 纯CSS3实现的图片滑块程序,效果非常酷
  9. C#中利用JQuery实现视频网站
  10. Web编程:JSP环境安装与配置
  11. python 操作mysql数据库demo
  12. 起底区块链人脸识别黑马,一个没有人像的人脸识别:iFace Chain(爱妃链)
  13. 20175226 2018-2019-2 《Java程序设计》第三周学习总结
  14. 网页中嵌入google地图
  15. Python Flask学习笔记之模板
  16. tomcat配置问题
  17. JavaScript使用localStorage缓存Js和css文件
  18. JSP报错Syntax error, insert ";" to complete Statement
  19. 必看的经典金融书籍推荐zz
  20. [Python_5] Python 线程

热门文章

  1. Centos7 编译安装 Nginx、MariaDB、PHP
  2. 如何在Centos7上安装&使用docker
  3. js 排列 组合
  4. CS231n 2016 通关 第二章-KNN
  5. Java中手动提交事务
  6. https://www.luogu.org/blog/An-Amazing-Blog/mu-bi-wu-si-fan-yan-ji-ge-ji-miao-di-dong-xi
  7. (水题)洛谷 - P1478 - 陶陶摘苹果(升级版)
  8. Codeforces - 9D - How many trees? - 简单dp - 组合数学
  9. 如果没有intelliJ 编译器?
  10. 第十四篇 .NET高级技术之反射