您的位置:首页 > 运维架构

BitmapFactory.Options

2015-08-14 02:05 288 查看
HttpEntity entity = httpResponse.getEntity();
byte[] byteIn = EntityUtils.toByteArray(entity);

BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();

bmpFactoryOptions.inJustDecodeBounds = true;

BitmapFactory.decodeByteArray(byteIn, 0, byteIn.length,bmpFactoryOptions);

int heightRatio = (int) Math.ceil(bmpFactoryOptions.outHeight/ height);

int widthRatio = (int) Math.ceil(bmpFactoryOptions.outWidth/ width);

if (heightRatio > 1 && widthRatio > 1) {

bmpFactoryOptions.inSampleSize = heightRatio > widthRatio ? heightRatio: widthRatio;

}

bmpFactoryOptions.inJustDecodeBounds = false;

bitmap = BitmapFactory.decodeByteArray(byteIn, 0,byteIn.length, bmpFactoryOptions);

outHeight:图片本来的高度

outWidth:图片本来的宽度

inSampleSize:图片缩放的倍数,如果设为4,则宽和高都是原来的1/4 ,则图是原来的16分之1

inJustDecodeBounds:如果设置为TRUE,不获取图片,不加载到内存。但是会把图片的高度和宽度都获取到
也就是说,如果我们把它设为true,那么BitmapFactory.decodeFile(String
path, Options opt)并不会真的返回一个Bitmap给你,它仅仅会把它的宽,高取回来给你

文档说明:

If set to true, the decoder will return null (no bitmap), but the out... fields will still be set, allowing the caller to query the bitmap without having to allocate the memory for its pixels.

所以先设置为true.预处理,然后设置为false

根据ImageView的大小获取bitmap

异步加载图片,在加载图片时,先加载一个默认的图片,然后在后台加载图片,加载完成后显示出来;



然后把ImageView的宽和高作为参数width和height传入

用bitmap工厂对象的outWidth和outHeight得到原图片的宽和高,除以ImageView的宽和高,从而知道缩放比例

再赋值给inSampleSize

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: