高斯模糊
方案如下:
采用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,这个不错的