您的位置:首页 > 移动开发 > Android开发

android高级之图片二次采样

2016-01-23 10:53 309 查看
今天咋们来学习图片的二次采样,那什么是图片的二次采样呢?为什么要采样呢?那么分两点来学习图片的二次采样:

一、为什么要二次采样

默认情况下,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;//返回压缩后的照片
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: