文章目录

最近公司需要实现对话框背景模糊效果,在网上找了很多资料,其中,这篇文章http://blog.jobbole.com/63894/给了我很大启发,这里感谢作者的分享精神(有一点要在这里说一下,在作者的两种模糊算法性能上,我的测试结果与作者相反,不知道是不是Android新版本上的RenderScript做了许多优化)。Android自带的API中,其实已经有很成熟的接口可以实现模糊效果,也就是本文要谈的RenderScript。首先申明一点:RenderScript不仅仅能实现模糊效果,它还能做许多图片处理方面的效果。

RenderScript是什么?
RenderScript是一个能高性能执行密集计算的Android框架,这个框架能利用硬件的多核实现平行计算,在以下这三个方面非常有用: image processing, computational photography, or computer vision。更多信息参见:http://developer.android.com/guide/topics/renderscript/compute.html

RenderScript有哪些类?
RenderScript:此类负责RenderScript框架的初始化,资源管理和卸载。并且,此类是RenderScript框架的入口。相当于计算引擎。
Allocation:此类是数据存储类。RenderScript计算的数据取自Allocation,并且计算所得数据存于Allocation。
ScriptIntrinsic:这是所有功能类的基类。具体某一方面功能的类都继承自它。比如:实现模糊效果的类ScriptIntrinsicBlur。

如何实现各种效果?
这里拿实现图片的模糊效果举例,下面是实现图片模糊效果的实例代码,代码返回的结果就是已被模糊的图片.

1
2
3
4
5
6
7
8
9
10
public Bitmap blur(Context c, Bitmap overlay) {
	RenderScript rs = RenderScript.create(c);
	Allocation overlayAlloc = Allocation.createFromBitmap(rs, overlay);
	ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());
	blur.setInput(overlayAlloc);
	blur.setRadius(radius);
	blur.forEach(overlayAlloc);
	overlayAlloc.copyTo(overlay);
	return overlay;
}

我这里有完整的图片模糊效果demo,如果需要,请邮件我:kongyouji@gmail.com.

文章目录