当前位置: 首页 > article >正文

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依赖。

然后就可以使用了。

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做一次高斯模糊。比如:

        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

 


http://www.kler.cn/a/551162.html

相关文章:

  • 设计模式14:职责链模式
  • 深入 Go 语言核心:map 和 slice 的传参有什么不同
  • DeepSeek 助力 Vue 开发:打造丝滑的颜色选择器(Color Picker)
  • MySQL的聚簇索引与非聚簇索引
  • 深入解析淘宝分类详情API接口:使用Python爬虫调用
  • 网络安全不分家 网络安全不涉及什么
  • Vue 3 中可读可写的计算属性(Computed Properties)的使用场景
  • go语言并发的最佳实践
  • 2025最新Java面试题大全(整理版)2000+ 面试题附答案详解
  • Python实战进阶 No1: RESTful API - 基于Flask的实例说明
  • Golang GORM系列:GORM分页和排序
  • SpringBoot分布式应用程序和数据库在物理位置分配上、路由上和数量上的最佳实践是什么?
  • Spring Boot最新技术特性深度解析与实战应用
  • SpringBoot 核心总结图
  • HarmonyNext上传用户相册图片到服务器
  • Spreadjs与GcExcel
  • 迅为RK3568开发板篇Openharmony配置HDF控制UART-什么是串口
  • Docker+DockerCompose+Harbor安装
  • DeepSeek R1本地部署 DeepSeek Api接口调用 java go版本
  • DFS算法篇:理解递归,熟悉递归,成为递归