Flutter的专属Skia引擎解析+用法原理
Skia是一款跨平台的2D图形库,是Google公司开发的,可以用于开发各种应用程序,如浏览器、游戏、移动应用程序等。Skia引擎的主要特点是速度快、可移植性强、占用的内存少、稳定性佳,适用于多种硬件平台。
Skia的目标是提供快速、高效、可扩展的2D图形库,它支持多种颜色模式和平滑算法,同时也支持字体、文本渲染和图像扭曲。Skia的绘图引擎可以与多个图形API进行集成,包括OpenGL、Vulkan和Metal等,并提供了自己的软件渲染器和GPU渲染器。
Skia引擎可以在多个操作系统和平台上使用,包括Android、iOS、Windows、Mac OS X和Linux。它是许多Google应用程序的核心组件,例如Chrome浏览器、Android操作系统和谷歌地图等。
Skia 与 Flutter 的关系
Flutter 是 Google 打造的高性能、跨平台的UI框架,不仅支持 Android、iOS,还支持 Windows、Linux 等操作系统。它可以给开发者提供简单、高效的方式来构建和部署跨平台、高性能移动应用;给用户提供漂亮、无平台区分的APP体验。
图形库 Skia 是 Flutter 跨平台的基石。Skia 保证了同一套代码调用在 Android 和 iOS 平台上的渲染效果是完全一致的。
目前,Skia 已然是 Android 官方的图像渲染引擎了,因此 Flutter Android SDK 无需内嵌 Skia 引擎就可以获得天然的 Skia 支持;而对于 iOS 平台来说,由于 Skia 是跨平台的,因此它作为 Flutter iOS 渲染引擎被嵌入到 Flutter 的 iOS SDK 中,替代了 iOS 闭源的 Core Graphics/Core Animation/Core Text,这也正是 Flutter iOS SDK 打包的 App 包体积比 Android 要大一些的原因。
Skia的基本原理
Skia库使用了一种称为“GPU加速”的技术来提高图形渲染的性能。它利用了硬件加速器(如手机或平板电脑上的GPU)来加速图形计算和绘制过程。通过利用GPU的并行处理能力,Skia可以在短时间内渲染大量的图形元素,提供流畅的用户体验。
Skia库还采用了一种称为“延迟渲染”的技术。延迟渲染意味着Skia并不立即将图形元素绘制到屏幕上,而是将它们存储在内存中的一个缓冲区中。当需要更新屏幕时,Skia引擎会一次性将缓冲区中的所有图形元素绘制到屏幕上,从而减少了渲染的次数,提高了绘制的效率。
使用Skia引擎绘制图形
为了使用Skia引擎绘制图形,我们需要在Android应用程序中添加Skia库的依赖。首先,在项目的build.gradle文件中添加Skia库的引用:
dependencies {implementation 'org.skia:skia:1.0.0'
}
然后,在代码中使用Skia库的API来创建和绘制图形元素。下面是一个简单的示例,演示了如何使用Skia引擎绘制一个圆形:
import org.skia.*;public class SkiaDemoActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_skia_demo);// 创建一个SkSurface对象,用于绘制图像Surface surface = Surface.makeRasterN32Premul(400, 400);Canvas canvas = surface.getCanvas();// 创建一个画笔对象,并设置其颜色和样式Paint paint = new Paint();paint.setColor(Color.RED);paint.setStyle(Paint.Style.FILL);// 在画布上绘制一个圆形canvas.drawCircle(200, 200, 100, paint);// 将绘制的图像显示在屏幕上Bitmap bitmap = Bitmap.createBitmapFromPixels(surface.peekPixels(), 400, 400, Bitmap.Config.ARGB_8888);ImageView imageView = findViewById(R.id.imageView);imageView.setImageBitmap(bitmap);}
}
上述代码首先创建了一个SkSurface对象,它代表了一个可绘制图像的表面。然后创建了一个Paint对象,用于设置绘制图形的样式和颜色。最后,使用Canvas对象的drawCircle()方法绘制了一个圆形,并将绘制的图像显示在屏幕上。更多关于flutter的进阶学习,可以参考《实战混合式开发Flutter3.0手册》点击可以擦查看里面的详细内容。
总结
Skia引擎是Android系统中的一个重要组成部分,它提供了高性能的图形渲染能力,能够在各种硬件平台上快速绘制和处理2D图形。开发者可以使用Skia库的API来创建自定义的图形界面和动画效果。通过利用GPU加速和延迟渲染等技术,Skia引擎能够提供流畅的用户体验。希望本文对你理解Android Skia引擎有所帮助。
相关文章:

Flutter的专属Skia引擎解析+用法原理
Skia是一款跨平台的2D图形库,是Google公司开发的,可以用于开发各种应用程序,如浏览器、游戏、移动应用程序等。Skia引擎的主要特点是速度快、可移植性强、占用的内存少、稳定性佳,适用于多种硬件平台。 Skia的目标是提供快速、高…...

python poetry的教程
Poetry Python世界中,Poetry是一个近年来备受瞩目的工具,它为开发者提供了一个灵活且强大的依赖管理解决方案。Poetry可以帮助开发者管理项目的依赖关系,同时提供了一系列的工具和功能,使开发者能够更轻松地创建和管理复杂的项目。…...
jq里的ajax超详细参数讲解
目录 1、url:要发送请求的URL地址。 2、type:请求的类型,可选参数,包括GET、POST、PUT、DELETE等,默认为GET。 3、data:要发送到服务器的数据,可以是一个字符串、数组或对象。默认为null。 4…...

郑州大学2020级信息安全专业——保研小结
最终上岸 夏令营: 夏令营开始的时间一般比较早,在期末考试之前就已经开始了,需要提前联系导师,有的学校是弱com,导师愿意要你入营的概率和优营的概率就会比较大,因此要提前联系导师,复习好项目…...
【系统架构设计】架构核心知识: 3.6 负载均衡和Session
目录 一 负载均衡 1 应用层负载均衡 2 传输层负载均衡 二 Session 1 Session共享机制...
python pip安装特定包,网络慢的问题
文件requirements.txt httpx0.24.0 Pillow9.5.0 playwright1.33.0 tenacity8.2.2 tornado6.3.2 PyExecJS1.5.1 opencv-python4.7.0.72 tortoise-orm[asyncmy]0.19.3 aerich0.7.2 numpy~1.24.4 redis~4.6.0 Pydantic1.7将文件放入任意一个目录下 cd 到该目录下执行 while read…...

CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片
CMT2300A超低功耗127-1020MHz Sub-1GHz全频段SUB-1G 射频收发芯片 Sub-1GHz,是指小于1GHz频率的统称。Sub-1GHz无线电频段应用的主要特点:(1)频率较低波长较长,传输距离远,穿透性强;࿰…...

设计模式之工厂模式 ( Factory Pattern )(1)
其他设计模式也会后续更新… 设计模式其实需要有一定开发经验才好理解,对代码有一定的设计要求,工作中融入才是最好的 工厂模式 ( Factory Pattern ) 工厂模式(Factory Pattern)提供了一种创建对象的最佳方式 工厂模式在创建对…...
OpenCV入门11:轮廓提取和形状识别
轮廓分析主要用于轮廓提取和形状识别等任务。在OpenCV中,轮廓提取和形状识别是图像处理和计算机视觉中常见的任务。下面是关于这两个知识点的一些基本内容: 轮廓提取: 轮廓提取是指从图像中提取出物体轮廓的过程。在OpenCV中,可…...

竞赛选题 深度学习疲劳检测 驾驶行为检测 - python opencv cnn
文章目录 0 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习加…...

Java编程--定时器/线程池/工厂模式/ ThreadPoolExecutor
前言 逆水行舟,不进则退!!! 目录 什么是定时器 实现一个定时器 自己实现一个定时器 什么是线程池 线程池的使用: 什么是工厂模式? 自己实现一个线程池: ThreadPoolExecutor 类…...

【python】Django——django简介、django安装、创建项目、快速上手
笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ Django基础——django安装、创建django项目、django快速上手 django简介django安装1. conda创建环境pydjango2. pip安装django3. django目录 创建项目1. 打开终端(cmd)2. 进入某个目录3.创建项目命令4.django项目…...

未来之选:为什么向量数据库是您的数据管理利器
文章目录 前言什么是向量数据库?向量数据库的机制向量数据库的优点查询向量数据库 什么是向量Embedding?Amazon OpenSearch Service总结 前言 向量数据库擅长处理复杂的高维数据,正在彻底改变商业世界的数据检索和分析。它们执行相似性搜索…...

隧道施工工艺流程vr线上虚拟展示成为产品3D说明书
行业内都知道,汽车生产的大部分都需要冲压加工来完成,因此汽车冲压工艺是汽车制造过程中的重要环节,传统的展示方式往往局限于二维图纸和实地操作,难以充分展现工艺的细节和流程。然而,随着技术的进步,汽车…...
Nacos(含安装)
Nacos是一个开源的动态服务发现、配置和管理平台。它提供了服务发现、服务健康检查、动态配置管理、服务元数据管理等功能,支持多种服务发现和注册方式。Nacos可以帮助开发者快速构建一个具有弹性和高可用性的微服务应用程序。Nacos的全称是Named after Configurati…...

本地跑项目解决跨域问题
跨域问题: 指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对 javascript 施加的安全限制。 同源策略: 是指协议(protocol)、域名(host)、端口号&…...
聊聊logback的isDebugEnabled
序 本文主要研究一下logback的isDebugEnabled isDebugEnabled public final class Loggerimplements org.slf4j.Logger, LocationAwareLogger, LoggingEventAware, AppenderAttachable<ILoggingEvent>, Serializable {//......public boolean isDebugEnabled() {retur…...

ChatGPT+Roblox,元宇宙的AI叙事逻辑#Leveling Up
MixCopilot 嗨,亲爱的听众朋友们!欢迎收听我们的播客节目!我是你们的主播:MixCopilot 混合副驾。今天我们要为大家带来的是我们的AI革命系列节目之一。这个系列节目聚焦于AI领域的一些最有影响力的建设者,他们将会讨论…...

Spark算子
一、编写spark程序的准备工作(程序入口 SparkContext) 1.创建SparkConf val conf new SparkConf().setMaster("local[2]").setAppName("hello-app") 2.创建sparkContext val sc: SparkContext new SparkContext(conf) 二、基…...

Containerd接入Harbor仓库
在使用容器时,避免不了会使用到私有仓库,一般都是采用 harbor 作为私有仓库,docker 对接 harbor 仓库非常简单,哪 containerd 如何对接 harbor 呢? 在内网使用 harbor 根据个人习惯,一般都是非 http 并且是…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...