Android RenderScript API废弃,迁移到高性能renderscript-toolkit及耗时优化,Kotlin

Android RenderScript API废弃,迁移到高性能renderscript-toolkit及耗时优化,Kotlin

高版本Android的高斯模糊(毛玻璃)实现已经废弃,新版可迁移、换用新的方式实现:

https://developer.android.com/guide/topics/renderscript/migrate?hl=zh-cn

从 Android 12 开始,RenderScript API 已被废弃。设备和组件制造商已停止提供硬件加速支持,预计将在未来的版本中完全取消对 RenderScript 的支持。

C/C++ 性能可能足以满足许多用例的需要,如果您仅将 RenderScript 用于内建函数,可使用 RenderScript 内建函数替换工具包来替代。后者更易于使用,并且有可能将性能提高 2 倍!

如果您需要充分利用 GPU 加速功能,我们建议您将脚本迁移到 Vulkan,其他加速选项包括将脚本迁移到 OpenGL,方法是使用基于画布的图片操作,或利用 Android 图形着色语言 (AGSL)

在 Android 平台中废弃 RenderScript 后,将在 Android Gradle 插件中取消对 RenderScript 的支持。从 Android Gradle 插件 7.2 开始,废弃了 RenderScript API。它们会继续正常运行,但会产生警告。未来的 AGP 版本将不再支持 RenderScript。

替换方式:

1、在这里下载依赖的module包:

https://github.com/android/renderscript-intrinsics-replacement-toolkit

其中里面有 renderscript-toolkit,将 renderscript-toolkit 作为一个Android Module添加。

2、在应用中添加对 renderscript-toolkit 添加Module依赖。

然后就可以使用了。

Kotlin 复制代码
import android.graphics.BitmapFactory
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import com.google.android.renderscript.Toolkit

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.image_layout)

        //val imageView1 = findViewById<ImageView>(R.id.image1)

        val imageView2 = findViewById<ImageView>(R.id.image2)
        val imageView3 = findViewById<ImageView>(R.id.image3)

        val bmp = BitmapFactory.decodeResource(resources, R.mipmap.img)

        var t = System.currentTimeMillis()
        val blurBmp2 = Toolkit.blur(bmp, 10)
        Log.d("fly", "cost time = ${System.currentTimeMillis() - t}")
        imageView2.setImageBitmap(blurBmp2)

        t = System.currentTimeMillis()
        val blurBmp3 = Toolkit.blur(bmp, 20)
        Log.d("fly", "cost time = ${System.currentTimeMillis() - t}")
        imageView3.setImageBitmap(blurBmp3)

        Toolkit.shutdown()
    }
}

记得在应用退出时候关闭Toolkit。

Toolkit在第一次调用blur时候,耗时过长,因为初始化。优化的一个思路是在正式开始之前,先主动调用Toolkit.blur做一次高斯模糊。比如:

Kotlin 复制代码
        val fakeBmp = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
        Toolkit.blur(fakeBmp) //没有意义的一次高斯模糊,只是为了让Toolkit的初始化加载前置,让后续的调用避免耗时。

后续调用Toolkit.blur耗时比较少,且耗时稳定。

Android RenderEffect对Bitmap高斯模糊(毛玻璃),Kotlin(1)-CSDN博客文章浏览阅读308次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)_android kotlin实现毛玻璃遮罩-CSDN博客。https://blog.csdn.net/zhangphil/article/details/145597167

Android新版高斯模糊(毛玻璃)官方实现,Kotlin-CSDN博客文章浏览阅读549次,点赞13次,收藏4次。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android拼接合并图片生成长图代码实现合并两张图片,以第一张图片的宽度为标准,如果被合并的第二张图片宽度和第一张不同,那么就以第一张图片的宽度为准线,对第二张图片进行缩放。Android BitmapShader简洁实现马赛克/高斯模糊(毛玻璃),Kotlin(三)_android kotlin实现毛玻璃遮罩-CSDN博客。https://blog.csdn.net/zhangphil/article/details/145575404

相关推荐
旋律逍遥29 分钟前
《AOSP上手》 2、Framework 开发小需求 “去掉原生 Launcher 中的 google 搜索栏”
android
liulilittle32 分钟前
在 Android Shell 终端上直接运行 OPENPPP2 网关路由配置指南
android·linux·开发语言·网络·c++·编程语言·通信
低调小一34 分钟前
KuiklyUI 科普:UI 如何映射到 Android View 并完成渲染
android·windows·ui
火柴就是我1 小时前
android shadertoy效果 转换成 Android动态壁纸的写法
android
Bryce李小白1 小时前
Kotlin Flow 的使用
android·开发语言·kotlin
深色風信子1 小时前
SpringAI Kotlin 本地调用 Ollama
kotlin·springai ollama·kotlin springai·kotlin ai·kotlin ollama
氦客3 小时前
Android Compose 状态的概念
android·compose·重组·状态·组合·mutablestate·mutablestateof
Jerry4 小时前
Compose 约束条件和修饰符顺序
android
千里马学框架5 小时前
安卓系统中线程优先级Priority查看方式汇总
android·framework·线程·安卓framework开发·优先级·priority
沐怡旸5 小时前
【Android】Handler/Looper机制相关的类图和流程图
android