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

相关推荐
千里马学框架20 小时前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台20 小时前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone21 小时前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc21 小时前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
ai2work1 天前
ch23 综合复刻:从零做一个最小可用版本(capstone)
kotlin
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
ai2work1 天前
ch21 签名、校验与发版
kotlin
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui