android api实现高斯模糊,且兼容低版本

    本文转载自:http://www.2cto.com/kf/201508/427387.html



一、利用android api实现高斯模糊


关于高斯模糊网上已经有很多不错的文章介绍了,在这里就不重复了。

效果已经看到了,就来看看怎么实现的吧。首先是实现高斯模糊的核心代码

public static Bitmap blurBitmap(Bitmap bitmap, Context context) {

	// 用需要创建高斯模糊bitmap创建一个空的bitmap
	Bitmap outBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);

	// 初始化Renderscript,这个类提供了RenderScript context,在创建其他RS类之前必须要先创建这个类,他控制RenderScript的初始化,资源管理,释放
	RenderScript rs = RenderScript.create(context);

	// 创建高斯模糊对象
	ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));

	// 创建Allocations,此类是将数据传递给RenderScript内核的主要方法,并制定一个后备类型存储给定类型 
	Allocation allIn = Allocation.createFromBitmap(rs, bitmap);
	Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);

	// 设定模糊度
	blurScript.setRadius(25.f);

	// Perform the Renderscript
	blurScript.setInput(allIn);
	blurScript.forEach(allOut);

	// Copy the final bitmap created by the out Allocation to the outBitmap
	allOut.copyTo(outBitmap);

	// recycle the original bitmap
	bitmap.recycle();

	// After finishing everything, we destroy the Renderscript.
	rs.destroy();

	return outBitmap;
}

然后是调用部分

public static Bitmap getBlurBitmap(View rootView, Context context) {
	try {
		if (rootView == null || context == null) {
			return null;
		}
		rootView.setDrawingCacheEnabled(true);
		Bitmap drawingCache = rootView.getDrawingCache();
		Bitmap bgBitmap = Bitmap.createBitmap(drawingCache);
		return BitmapUtil.blurBitmap(bgBitmap, context);
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

这样就可以就实现了高斯模糊效果,再将模糊效果显示在界面上就可以了。

二、兼容低版本


android有一个很麻烦的东西就是需要兼容的版本很多,按照上面的方式实现了,在4.2及以上的版本就可以轻松出效果了,但是在低版本就会出异常:java.lang.NoClassDefFoundError: android.renderscript.ScriptIntrinsicBlur。导致这个问题就是因为这个api不能向下兼容,现在我们就来解决这个问题。其实google早就提供了方案,我们只需要使用就好了。

1、引入renderscript-v8.jar

2、将sdk\build-tools\19.1.0\renderscript\lib\packaged下的armeabi-v7a、mips、x86拷贝到libs目录下


:这些资源都是在sdk中包含,我的是在:sdk\build-tools\19.1.0\renderscript下,你们可以找找你们自己的目录 到这里就可以完美的兼容4.2以下的版本了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值