Android(java)学习笔记236:多媒体之加载大图片到内存(Bitmap API)
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);
Android(java)学习笔记236:多媒体之加载大图片到内存(Bitmap API)的更多相关文章
- Android(java)学习笔记179:多媒体之加载大图片到内存(Bitmap API)
1. Bitmap (API使用) android里面的bitmap中,一个像素点需要4个byte去表示,这是因为android表示颜色是" argb ":其中 a 表示是透明度, ...
- Flutter学习笔记(19)--加载本地图片
如需转载,请注明出处:Flutter学习笔记(19)--加载本地图片 上一篇博客正好用到了本地的图片,记录一下用法: 首先新建一个文件夹,这个文件夹要跟目录下 然后在pubspec.yaml里面声明出 ...
- Android开发中如何解决加载大图片时内存溢出的问题
Android开发中如何解决加载大图片时内存溢出的问题 在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...
- Android -- 加载大图片到内存,从gallery获取图片,获取图片exif信息
1. 加载大图片到内存,从gallery获取图片 android默认的最大堆栈只有16M, 图片像素太高会导致内存不足的异常, 需要将图片等比例缩小到适合手机屏幕分辨率, 再加载. 从gallery ...
- 图片_ _Android有效解决加载大图片时内存溢出的问题 2
Android有效解决加载大图片时内存溢出的问题 博客分类: Android Android游戏虚拟机算法JNI 尽量不要使用setImageBitmap或 setImageResource或 Bit ...
- Android学习笔记_51_转android 加载大图片防止内存溢出
首先来还原一下堆内存溢出的错误.首先在SD卡上放一张照片,分辨率为(3776 X 2520),大小为3.88MB,是我自己用相机拍的一张照片.应用的布局很简单,一个Button一个ImageView, ...
- Android 加载大图片到内存
本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- Android有效解决加载大图片时内存溢出的问题
首先,您需要了解一下,图片占用内存的计算方法,传送门:http://blog.csdn.net/scry5566/article/details/11568751 尽量不要使用setImageBitm ...
- android加载大图片到内存
1)演示效果: 1)代码演示: 布局代码: 权限配置:
随机推荐
- bootstrap日期时间插件datetimepicker
<!DOCTYPE HTML> 02 <html> 03 <head> 04 <link href="http://netdna.boo ...
- 用urlencode(String str)对URL传递参数进行编码,提高安全
在PHP 提交地址后面带有参数的时候,参数会在浏览器的地址栏暴露无疑,这样是不安全的,这个时候就必须用些方法对这些参数进行安全处理 这里可以用 urlencode(String URL);//对URL ...
- TRECT的使用
作为一张画布,在上面绘制各种图形或显示图像,但在CANVAS的使用过程中少不了一个特殊对象,那就是矩形RECT,灵活使用它会完成很多特殊的功能,为Delphi编制的Windows程序增加活力. REC ...
- git 基本命令 (常用)
http://www.zhixing123.cn/ubuntu/37865.html 参考的这个网址 他这里有个错误:id_rsa.pub 应该复制这个 而不是id_rsa 1341 git in ...
- JAVA线程示范之一种
线程有两种方法生成,这是其中的一种.. MyRunnable.java public class MyRunnable implements Runnable { public void run() ...
- 宏中"#"和"##"的用法
一.一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include<cstdio> #include<climits> using nam ...
- Visual C++ 8.0对象布局的奥秘:虚函数、多继承、虚拟继承(VC直接输出内存布局)
原文:VC8_Object_Layout_Secret.html 哈哈,从M$ Visual C++ Team的Andy Rich那里又偷学到一招:VC8的隐含编译项/d1reportSingleCl ...
- SQL Server 全文搜索 配置、查询初体验
原文:SQL Server 全文搜索 配置.查询初体验 一.使用SQL Server全文搜索配置 要使用SQL Server的全文搜索服务,需要进行如下配置. 1.开启全文搜索服务: 2.开启数据库的 ...
- php pack、unpack、ord 函数使用方法
string pack ( string $format [, mixed $args [, mixed $... ]] ) Pack given arguments into a binary st ...
- 分页SQL模板
select * from ( select rownum as rn ,a.* from ( select * from page a where object_id >1000 and ow ...