Android:用RenderScript实现模糊效果

时间:2021-12-04 16:05:49

现在很多手机APP都会有一定的模糊效果,比如我微信语音的界面,虾米音乐的专辑界面,以及Bilibili的未播放视频前的界面等等,广泛涉及。常用的图片高斯模糊技术有三种:RenderScript、fastBlur、对RenderScript和fastBlur的优化

 

使用RenderScript

1:初始化一个RenderScript Context:RenderScript上下文环境通过create(Context)方法来创建,它保证RenderScript的使用并且提供一个控制后续所有RenderScript对象(如:ScriptIntrinsicBlur、Allocation等)生命周期的对象。

(1)          public classMirrorActivity {
   
private static BitmaprsBlur(Context context,Bitmap source, intradius){

        Bitmap inputBmp = source
;
       
//(1)
       
RenderScriptrenderScript =  RenderScript.create(context);

       
Log.i(TAG,"scale size:"+inputBmp.getWidth()+"*"+inputBmp.getHeight());

 

2:通过Script至少创建一个Allocation

final Allocation input = Allocation.createFromBitmap(renderScript,inputBmp);
final
Allocation output = Allocation.createTyped(renderScript,input.getType());

 

3:创建ScriptIntrinsic

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

 

3:填充数据到Allocations

5: 设置模糊半径

6:启动内核,调用方法处理

7: 从Allocation中拷贝数据

8: 销毁RenderScript对象

scriptIntrinsicBlur.setInput(input);
scriptIntrinsicBlur.setRadius(radius);
scriptIntrinsicBlur.forEach(output);
output.copyTo(inputBmp);
renderScript.destroy();

return
inputBmp;

 

 

RenderScript 兼容包:

还是不太了解,百度了一点儿内容