参考了这篇文章: Android:简单靠谱的动态高斯模糊效果
写一个方法,用来对Bitmap进行高斯模糊:
public static Bitmap blurBitmap(Bitmap bitmap ,Context context){//Let's create an empty bitmap with the same size of the bitmap we want to blur Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); //Instantiate a new Renderscript RenderScript rs = RenderScript.create(context); //Create an Intrinsic Blur Script using the Renderscript ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)); //Create the Allocations (in/out) with the Renderscript and the in/out bitmaps Allocation allIn = Allocation.createFromBitmap(rs, bitmap); Allocation allOut = Allocation.createFromBitmap(rs, outBitmap); //Set the radius of the blur: 0 < radius <= 25 blurScript.setRadius(12.0f); //Perform the Renderscript blurScript.setInput(allIn); blurScript.forEach(allOut); //Copy the final bitmap created by the out Allocation to the outBitmap allOut.copyTo(outBitmap); //recycle the original bitmap bitmap.recycle(); //After finishing everything, we destroy the Renderscript. rs.destroy(); return outBitmap;}
blurScript.setRadius(12.0f);//这个是设置模糊度,取值在0 < radius <= 25,值越大越模糊
既然是网络图片,用url生成Bitmap的方法如下:
/***@paramurlpath*@returnBitmap* 根据图片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;}
这个方法不能在UI线程中执行,又引出下面的部分,用Thread+Handler实现,代码如下:
Thread:
new Thread(new Runnable() {@Override public void run() {Bitmap bitmap = Utils.getBitMBitmap(headerImageUrl); Message msg = Message.obtain(); msg.what = 0; msg.obj = bitmap; handler.sendMessage(msg); }}).start();
Handler:
Handler handler = new Handler(){@Override public void handleMessage(Message msg) {if(msg.what == 0){Bitmap newBitmap = Utils.blurBitmap((Bitmap) msg.obj ,getActivity()); iv_parent.setImageBitmap(newBitmap); }}};
完毕
如果觉得《Android中为网络图片设置高斯模糊效果》对你有帮助,请点赞、收藏,并留下你的观点哦!