/**
* Created by kk on 17-4-26
*/
public class RenderscriptUtils {
private static final String TAG = "kk";
private Context context;
private static RenderscriptUtils instance;
public RenderscriptUtils(Context context) {
this.context = context;
}
public static RenderscriptUtils getInstance(Context context) {
if (null == instance) {
instance = new RenderscriptUtils(context);
return instance;
}
return instance;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public Bitmap blur(Bitmap bitmap, float radius) {
if (bitmap == null) {
return null;
}
if (context == null) {
return null;
}
Bitmap output = Bitmap.createBitmap(bitmap); // 创建输出图片
RenderScript rs = RenderScript.create(context); // 构建一个RenderScript对象
ScriptIntrinsicBlur gaussianBlue = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); // 创建高斯模糊脚本
Allocation allIn = Allocation.createFromBitmap(rs, bitmap); // 创建用于输入的脚本类型
Allocation allOut = Allocation.createFromBitmap(rs, output); // 创建用于输出的脚本类型
gaussianBlue.setRadius(radius); // 设置模糊半径,范围0f<radius<=25f
gaussianBlue.setInput(allIn); // 设置输入脚本类型
gaussianBlue.forEach(allOut); // 执行高斯模糊算法,并将结果填入输出脚本类型中
allOut.copyTo(output); // 将输出内存编码为Bitmap,图片大小必须注意
rs.destroy(); // 关闭RenderScript对象,API>=23则使用rs.releaseAllContexts()
return output;
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void setImage(View v, Bitmap bitmap) {
v.setBackground(new BitmapDrawable(context.getResources(), bitmap));
}
private void getBitmapFromNet(final View v, String url) {
VolleyUtils volleyUtils = App.getInstance(context).getVolleyUtils();
RequestQueue requestQueue = volleyUtils.getRequestQueue();
ImageRequest imageRequest = new ImageRequest(url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
Bitmap blurBitmap = blur(bitmap, 18f);
if (null != blurBitmap) {
setImage(v, blurBitmap);
}
}
}, 500, 300, Bitmap.Config.ARGB_8888,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError e) {
e.printStackTrace();
Log.e(TAG, "onErrorResponse: " + e.getErrorInfo().getMessage());
}
});
requestQueue.add(imageRequest);
}
public void setImageVague(final View v, final String uri) {
if (null == context) {
return;
}
getBitmapFromNet(v, uri);
}
}