参考了这篇文章: 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的方法如下:
/** * @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; }
这个方法不能在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); } } };
完毕