android api实现高斯模糊,且兼容低版本
来源:互联网 发布:局域网ip mac扫描软件 编辑:程序博客网 时间:2024/05/25 21:33
一、利用android api实现高斯模糊
关于高斯模糊网上已经有很多不错的文章介绍了,在这里就不重复了。先来看一个效果
效果已经看到了,就来看看怎么实现的吧。首先是实现高斯模糊的核心代码
<span style="white-space:pre"></span>public static Bitmap blurBitmap(Bitmap bitmap, Context context) {// 用需要创建高斯模糊bitmap创建一个空的bitmapBitmap 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 RenderscriptblurScript.setInput(allIn);blurScript.forEach(allOut);// Copy the final bitmap created by the out Allocation to the outBitmapallOut.copyTo(outBitmap);// recycle the original bitmapbitmap.recycle();// After finishing everything, we destroy the Renderscript.rs.destroy();return outBitmap;}然后是调用部分
<span style="white-space:pre"></span>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(将jar包放在libs目录下,add to build path,一般只需要引入就可以)
如果只加入了jar包,工程不会报错,但是运行就会有问题:android.support.v8.renderscript.RSRuntimeException: Error loading RS jni library:java.lang.UnsatisfiedLinkError: Couldn't load RSSupport: findLibrary returned null;从错误中可以看出就是没有找到jni library
2、在libs目录下分别建三个目录:armeabi-v7a、mips、x86,然后将librsjni.so和libRSSupport.so分别放到对应的目录下就可以了
注:1、这些资源都是在sdk中包含,我的是在:sdk\build-tools\android-4.4.2\renderscript,你们可以找找你们自己的目录
到这里就可以完美的兼容4.2以下的版本了。
2、如果找东西很麻烦,推荐一款小且实用的全局搜索工具“everthing”不知道mac有没有,我一直用pc觉得非常好用
三、说明
1、因为公司一直还在用eclipse,所以这套解决方案也是在eclipse上面的,android studio应该比这个还简单,具体可以参考:点击打开链接
2、网上也有很多种方式来实现高斯模糊,我个人也尝试了些,但是效果都没有ScriptIntrinsicBlur,因为google的RenderScript具有很高效的图形能力,有关RenderScript想深入了解的同学请自行google 1 1
- android api实现高斯模糊,且兼容低版本
- android api实现高斯模糊,且兼容低版本
- android api实现高斯模糊,且兼容低版本
- Android 实现高斯模糊效果及低版本兼容
- Android 实现高斯模糊效果及低版本兼容
- Android 实现高斯模糊效果及低版本兼容
- Android 实现高斯模糊效果及低版本兼容
- 使用RenderScript来实现高斯模糊,兼容低版本
- AndroidViewHover(Android高斯模糊低版本兼容)使用总结
- 低版本 高斯模糊 android.support.v8.renderscript
- 低版本SDK实现高版本api
- android版本兼容,高版本低版本兼容性
- Android实现一键复制粘贴,兼容低版本系统(api 11以下)
- 低版本编译兼容高版本版本
- Android低版本上如何调用高版本API
- IE高版本兼容低版本
- android兼容低版本Fragment
- Android Fragment兼容低版本
- Objective-C_分数类实现
- C#高级编程六十天----LINQ的概述
- H264学习方法-心历路程-资料搜集
- UVA 11997 K Smallest Sums(优先队列)
- 杭电ACM5327
- android api实现高斯模糊,且兼容低版本
- CF 439D Devu and his Brother
- codeforces244C. Checkposts
- 双向链表的插入删除操
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误解决办法
- Ubuntu 安装mysql和简单操作
- JAVA学习第十二天
- 鸟哥的linux私房菜学习笔记十一 ,命令权限
- 如何清晰地思考:近一年来业余阅读的关于思维方面的知识结构整理(附大幅思维导图)