之前遇到一个高斯模糊的需求,然后最后使用的其中一种,记录如下
首先要说明,我们要使用Support Library,所以版本是有要求的:
Android SDK Tools 版本必须大于等于22.2
Android SDK Build-tools 版本必须大于等于18.1.0
如果没有达到,请使用SDK Manager升级一下。
/**
* @param context 上下文对象
* @param source 源图片
* @param radius 这个是设置模糊度,取值在0 < radius <= 25,值越大越模糊
* @return
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static Bitmap rsBlur(Context context, Bitmap source, int radius) {
Bitmap inputBmp = source;
RenderScript renderScript = RenderScript.create(context);
Logger.d(TAG, "scale size:" + inputBmp.getWidth() + "*" + inputBmp.getHeight());
// Allocate memory for Renderscript to work with
final Allocation input = Allocation.createFromBitmap(renderScript, inputBmp);
final Allocation output = Allocation.createTyped(renderScript, input.getType());
// Load up an instance of the specific script that we want to use.
ScriptIntrinsicBlur scriptIntrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
scriptIntrinsicBlur.setInput(input);
// Set the blur radius
scriptIntrinsicBlur.setRadius(radius);
// Start the ScriptIntrinisicBlur
scriptIntrinsicBlur.forEach(output);
// Copy the output to the blurred bitmap
output.copyTo(inputBmp);
renderScript.destroy();
return inputBmp;
}
通常拿到的是一张图片的url地址,下面提供一个url转bitmap的方法
/**
* @param urlpath
* @return Bitmap
* 根据图片url获取图片对象
*/
public static Bitmap getBitMBitmap(String urlpath) {
Bitmap map = null;
try {
URL url = new URL(urlpath);
URLConnection conn = url.openConnection();
conn.connect();
InputStream in;
in = conn.getInputStream();
map = BitmapFactory.decodeStream(in);
// TODO Auto-generated catch block
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
以上两种方法结合,即可对一张网络图片进行高斯模糊处理。
网友评论