android高级之图片二次采样
2016-01-23 10:53
309 查看
今天咋们来学习图片的二次采样,那什么是图片的二次采样呢?为什么要采样呢?那么分两点来学习图片的二次采样:
一、为什么要二次采样
默认情况下,bitmap每个像素点占用4个字节(ARGB_8888),比如一张3543×3503的图片差不多在内存中占用47M
安卓系统给每个应用分配的内存都是有限的,可以使用Runtime.getRuntime().maxMemory()来获取
内存有限空间,默认情况下图片存储又需要大量的空间,于是就容易产生OOM(内存溢出)
二、二次采样的实现(这里我封装成了一个方法,使用时需要传入图片的资源id和宽和高的像素)
一、为什么要二次采样
默认情况下,bitmap每个像素点占用4个字节(ARGB_8888),比如一张3543×3503的图片差不多在内存中占用47M
安卓系统给每个应用分配的内存都是有限的,可以使用Runtime.getRuntime().maxMemory()来获取
内存有限空间,默认情况下图片存储又需要大量的空间,于是就容易产生OOM(内存溢出)
二、二次采样的实现(这里我封装成了一个方法,使用时需要传入图片的资源id和宽和高的像素)
/**@param id 需要压缩的图片的资源id *@param maxw 需要压缩图片后宽的像素 *@param maxh 需要压缩图片后高的像素 */ private Bitmap getCompressBm(int id,int maxw,int maxh) { Bitmap bm = null; int iSamplesize = 1; //只采样边框 BitmapFactory.Options bitmapFactoryOptions = new BitmapFactory.Options(); bitmapFactoryOptions.inJustDecodeBounds = true; bm = BitmapFactory.decodeResource(getResources(), id, bitmapFactoryOptions); int iWidth = bitmapFactoryOptions.outWidth; int iHeight = bitmapFactoryOptions.outHeight; //对缩放比例进行调整,直到宽和高符合我们要求为止 while (iWidth > w|| iHeight > h){ iSamplesize = iSamplesize*2; iWidth = iWidth/iSamplesize; iHeight = iHeight/iSamplesize; } bitmapFactoryOptions.inSampleSize = iSamplesize; //把inJustDecodeBounds置为false bitmapFactoryOptions.inJustDecodeBounds = false; // 设置像素颜色信息 bitmapFactoryOptions.inPreferredConfig = Bitmap.Config.RGB_565; bm = BitmapFactory.decodeResource(getResources(),id, bitmapFactoryOptions); return bm;//返回压缩后的照片 }
相关文章推荐
- ListView-Arrayadapter
- android ImageView点击时背景图修改(简单方法)
- Android布局
- 个人收藏-Android样式的开发
- android 常用布局公用属性
- 安卓蓝牙篇-适合入门
- android camera HAL 错误数据流处理
- 【Android】Toast专题
- Android Linker学习笔记
- Android Activtity Security
- Android应用安全开发之源码安全
- Android之TextView的样式类Span的使用具体解释
- Android应用方法隐藏及反调试技术浅析
- Android应用公布的准备——渠道注冊与认证
- android高级控件之Volley
- Android之SurfaceView学习(一)
- android sim 卡短信读写
- android 启动页启动慢或白屏的解决方法
- Android应用资源文件格式解析与保护对抗研究
- Android Hook(2) Java2java