方案如下:
采用RenderScript的方式棠赛,他提供了java可調(diào)用的api哮奇,是C處理,效率高睛约,但是是api17引入鼎俘,之后的需要兼容包,兼容包160K辩涝。三思- -贸伐。
直接貼代碼不多解釋了:
public Bitmap rsblur(Bitmap bitmap, Context context){
? ? ? ? ? int width = bitmap.getWidth();
? ? ? ? ? int height = bitmap.getHeight();
? ? ? ? ? //先優(yōu)化bitmap使他像素點(diǎn)降低
? ? ? ? ? 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庫(kù)
? ? ? ? renderscriptTargetApi 18
? ? ? ? ?renderscriptSupportModeEnabled true
}
捉邢,速度非常之快,推薦= -商膊。之前我用java算法伏伐,要將近一秒還容易OOM,這個(gè)不錯(cuò)的