bitmap加载大图,bitmap放大
在处理位图的过中经常遇到的问题是呜,尤其是在加载像素比较大的位图时,出现这种问题的概率比较高。在加载图片的时候,就要考虑是否真的需要那么大像素的位图,如果要显示的图片的大小是120x140,但是要加载的资源的图片是1024X768的,这时候如果直接加载资源很容易出现伯父的问题,如果在加载图片之前能够知道图片的像素的大小,然后在适当的压缩处理,然后在显示出来,这样伯父的问题就比较不容易出现。
读取位图的大小和类型
压缩提供了很多方法来解析方法(decodeByteArray()、deco canal()、decodeResource()等等)来创建位图,你可以选择一个合适的方法来创建位图,但是这样直接的创建位图和容易引起呜,位图工厂还提供一组配套的方法来创建位图,需要加上位图工厂。选择的参数,在显示位图之前事先读取位图的大小和类型:
位图工厂options options=new bitmap factory .options();
选项。injustdecodebounds=true
位图工厂。解码资源(get resources(),R.drawable.myimage,options);
int图像高度=选项。外部高度;
int图像宽度=选项。外部宽度;
字符串imageType=options。outmime类型;
将位图工厂。选择的不公正的判决设置为没错,可以在解析位图之前获得位图的大小和类型
压缩位图之后,再加载到内存
在显示位图之前,需要获得目标显示的位图的大小和要加载的位图的大小,然后计算出来一个合适的压缩比,把通过压缩过的位图加载到内存中,下面是一个封装的方法,来计算合适的压缩比
public static int calculateInSampleSize(bitmap factory .Options options,int reqWidth,int reqHeight) {
//图像的原始高度和宽度
最终int height=options。外部高度;
最终int width=options。外部宽度;
samplesize=1中的int
如果(高度要求高度宽度要求宽度){
//计算高度和宽度与要求高度的比率
//宽度
最终整数高度比=数学。round((float)height/(float)reqHeight);
最终int宽度比=数学。圆形((浮点)宽度/(浮点)请求宽度);
//选择最小的比率作为采样率值,这将
//保证
//两个维度都大于或等于的最终图像
//请求的高度和宽度。
in samplesize=高度比宽度比?高度比:宽度比;
返回采样率
}
其中请求宽度,请求高度是目标的宽的和高度,高度,宽度是资源的高度和宽的,然后计算出一个压缩的比例,使用最小的压缩比
要使用这个方法,首先将不公正的判决设置为没错,解析获得资源的大小和类型,然后通过上面的方法获得压缩比,然后再将不公正的判决设置为假的,通过计算出来的要所比来解析最终要显示的位图
}
例子:图像视图的显示,图像视图要显示的图像的大小是100X100,实际的图像可能不是100X100,通过上面的方法做一下压缩处理,这样就避免出现伯父的问题
decodeSampledBitmapFromResource(get resources(),R.drawable.myimage,100,100));
上面是通过解析decodeSampledBitmapFromResource资源文件获得位图,当然还有其他的方法来获得位图
//计算采样率
选项。in samplesize=calculateInSampleSize(options,reqWidth,req height);
//解码设置了采样率的位图
选项。injustdecodebounds=false
返回BitmapFactory.decodeFile(文件名,选项);
2.通过文件描述符获得位图
公共静态位图decodeSampledBitmapFromDescriptor(
文件描述符文件描述符,整数请求宽度,整数请求高度,图像缓存缓存){
//首先使用inJustDecodeBounds=true进行解码以检查尺寸
最终位图工厂options options=new bitmap factory .options();
选项。injustdecodebounds=true
位图工厂。decafaildescriptor(文件描述符,空,选项);
//计算采样率
选项。in samplesize=calculateInSampleSize(options,reqWidth,req height);
//解码设置了采样率的位图
选项。injustdecodebounds=false
返回位图工厂。decafaildescriptor(文件描述符,空,选项);
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。