Android(安卓)使用RenderScript
16lz
2021-12-04
文章目录
- 参考
- gradle 配置
- 使用java 代码进行图像模糊
- 使用rs 脚本进行图像颜色反转
参考
官方文档
gradle 配置
build.gradle:
android {defaultConfig {//renderscript 兼容配置; renderscriptTargetApi 14 renderscriptSupportModeEnabled true}}...dependencies { //implementation com.android.support:appcompat-v7:28.0.0' //supportimplementation 'androidx.appcompat:appcompat:1.0.2' //androidx}
混淆:
#-dontwarn android.support.v8.renderscript.**#-keep public class android.support.v8.renderscript.** { *; }-dontwarn androidx.renderscript.**-keep public class androidx.renderscript.** { *; }
使用java 代码进行图像模糊
mImageView.buildDrawingCache();Bitmap bitmap = mImageView.getDrawingCache();RenderScript rs = RenderScript.create(this);Allocation overlayAlloc = Allocation.createFromBitmap(rs, bitmap);ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, overlayAlloc.getElement());blur.setInput(overlayAlloc);blur.setRadius(mRadius);blur.forEach(overlayAlloc);Bitmap overlay = Bitmap.createBitmap(mImageView.getWidth(), mImageView.getHeight(), Bitmap.Config.ARGB_8888);overlayAlloc.copyTo(overlay);mImageView.setImageBitmap(overlay);mImageView.destroyDrawingCache();
Allocation 用于分配内存对象;
ScriptIntrinsicBlur 系统提供的, 图像模糊的脚本类;
blur.setRadius(mRadius);
该模糊角度的在[0, 25];
系统还提供了一些其它的脚本类,它们都是ScriptIntrinsic类的子类,ScriptIntrinsicBlur 也是。
使用rs 脚本进行图像颜色反转
src/main/rs下,创建 ".rs"结尾的脚本文件 reverse_color.rs:
#pragma version(1)#pragma rs java_package_name(com.stone.gradle1)uchar4 __attribute__((kernel)) invert(uchar4 in){ uchar4 out = in; out.r =255- in.r; out.g = 255-in.g; out.b = 255-in.b; return out;}//每个rs文件编译后都会自动生成对应的Java代码 ScriptC_reverse_color.java 类//java_package_name java 代码生成在哪个包下//__attribute__ 用于声明这个函数是个RenderScript核心函数,而不是一个可调用的函数,// 这个函数不是个普通函数,是用于并行计算的函数。我们不能显式调用,它是RenderScript内部调用的函数
接着在 java 代码使用:
mImageView.buildDrawingCache();Bitmap bitmap = mImageView.getDrawingCache();Bitmap outBitmap = Bitmap.createBitmap(mImageView.getWidth(), mImageView.getHeight(), Bitmap.Config.ARGB_8888);RenderScript rs = RenderScript.create(this);ScriptC_reverse_color script = new ScriptC_reverse_color(rs);Allocation allocIn = Allocation.createFromBitmap(rs, bitmap);Allocation allocOut = Allocation.createFromBitmap(rs, outBitmap);script.forEach_invert(allocIn, allocOut);allocOut.copyTo(outBitmap);mImageView.setImageBitmap(outBitmap);mImageView.destroyDrawingCache();
更多相关文章
- android 7.0 系统关闭彩信过CTA测试的方法
- 转-Android(安卓)UI学习 - Tab的学习和使用
- Android应用程序请求SurfaceFlinger服务创建Surface的过程分析
- Android的Camera系统结构
- Android(安卓)GPS架构分析
- android本地系统服务详解
- Android的init过程详解(一)
- Android(安卓)电池管理系统
- Android(安卓)启动流程