Android 使用RenderScript
16lz
2021-01-23
文章目录
- 参考
- 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();
更多相关文章
- C语言函数以及函数的使用
- lua学习笔记 1 android 调用Lua, Lua脚本中启动Intent
- 通过ant脚本,编译打包android工程
- android中 MediaStore提取缩略图和原始图像
- android:shape的使用 (android用xml文件生成图像控件)
- Android 图像处理资料
- android NDK JNI设置自己的log输出函数
- [原]如何在Android用FFmpeg+SDL2.0解码显示图像
- Android build/envsetup.sh 脚本分析(lunch函数)