高斯模糊

2017-05-10  本文已影响0人  苏鑫最胖的一组

方案如下:

采用RenderScript的方式,他提供了java可调用的api,是C处理,效率高,但是是api17引入,之后的需要兼容包,兼容包160K。三思- -。

直接贴代码不多解释了:

public Bitmap rsblur(Bitmap bitmap, Context context){

          int width = bitmap.getWidth();

          int height = bitmap.getHeight();

          //先优化bitmap使他像素点降低

          int nw = Math.round(width * 1 / 8);

          int nh = Math.round(height * 1 / 8);

          Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, nw, nh, false);

           RenderScript renderScript = RenderScript.create(context);

          Allocation fromBitmap = Allocation.createFromBitmap(renderScript, scaledBitmap);

          Allocation out = Allocation.createTyped(renderScript, fromBitmap.getType());

          ScriptIntrinsicBlur scriptIntrinsicBlur = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));

          scriptIntrinsicBlur.setInput(fromBitmap);

//0-25

          scriptIntrinsicBlur.setRadius(10);

         scriptIntrinsicBlur.forEach(out);

         out.copyTo(scaledBitmap);

         renderScript.destroy();

      return scaledBitmap;

}

,api17以下需要v8兼容包android.support.v8,使用方式如下在build添加:

         defaultConfig {

        //使用support v8库

        renderscriptTargetApi 18

         renderscriptSupportModeEnabled true

}

,速度非常之快,推荐= -。之前我用java算法,要将近一秒还容易OOM,这个不错的

上一篇 下一篇

猜你喜欢

热点阅读