首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏阿利民

    Skia学习笔记」一、使用CMake交叉编译Skia

    什么是Skia   Skia是一个高性能的跨平台2D图形库,由Google开源并维护。 Android的UI绘制底层采用了Skia图形库,随着Skia的发展壮大,越来越多的平台开始采用Skia作为底层的图形库,比如Flutter、Chrome、Fuchsia等。 Skia效率很高,并且支持GPU加速,相比我们自己重写一套图形引擎,Skia的优势不言而喻。   3. Skia架构简洁,代码成熟,已经经受过了被各大项目的考验,极其稳定。   4. Skia使用BSD协议进行开源,基本意味着我们可以为所欲为 NDK交叉编译Skia   本文以Android平台的编译为例,其它平台的流程是一致的。   首先我们从Skia官网下载源码。 #克隆Skia仓库 git clone https://skia.googlesource.com/skia.git cd skia #下载所有Skia依赖的第三方源码 python2 tools/git-sync-deps

    6.6K21编辑于 2022-05-16
  • 来自专栏林德熙的博客

    WPF 使用 Skia 解析绘制 SVG 图片

    本文告诉大家如何在 WPF 里面,使用 Skia 解析绘制 SVG 图片。 本文也适合控制台使用 SkiaSharp 解析绘制 SVG 图片,本文的 WPF 部分只是在 Skia 绘制完成之后,将 Skia 的内容绘制到 WPF 的 WriteableBitmap 图片,从而在界面显示 使用 Skia 可以很完美输出 SVG 图片作为绘制的输出。 既然 Skia 没有这个功能,那也不能要求对 Skia 的封装 SkiaSharp 有这个功能吧,如 Matthew Leibowitz 大佬的回复 详细请看 https://github.com/mono 另一个库是 Svg.Skia 库,这是给 Skia 专用的库 接下来咱将使用这个 Svg.Skia 库,在 WPF 应用里,加载 SVG 文件,使用 Skia 渲染 按照惯例的第一步就是安装 NuGet

    2.7K30编辑于 2023-04-07
  • 来自专栏林德熙的博客

    WPF 使用 Skia 绘制 WriteableBitmap 图片

    本文告诉大家如何在 WPF 中使用 SkiaSharp 调用 Skia 这个全平台底层渲染框架,使用绘制命令在 WriteableBitmap 图片上绘制内容 谷歌提出了 Skia 全平台渲染框架,这是一个很底层的框架 ,详细请看 google/skia: Skia is a complete 2D graphic library for drawing Text, Geometries, and Images. 而 SkiaSharp 是 mono 组织对 Skia 的 .NET 封装库,可以完全用到 Skia 的底层渲染能力,详细请看 mono/SkiaSharp: SkiaSharp is a cross-platform 2D graphics API for .NET platforms based on Google’s Skia Graphics Library. 创建相关 在 Skia 里面和 D2D 一样有 Surface 的概念,也就是可以将绘制命令输入到 Skia 绘制到 Surface 上,而绘制内容将会作为像素数组放在传入的数组里面 小伙伴是否还记得

    2.8K20发布于 2020-09-02
  • 来自专栏林德熙的博客

    dotnet Vortice 通过 Angle 将 Skia 和 DirectX 对接

    本文将从控制台开始,以最简单方式和大家展示如何通过 Angle 将 Skia 和 DirectX 对接。 对接 与 Skia 对接的逻辑是发生在每次渲染上,这个过程中只是将 OpenGL 表面作为 Skia 画布而已,整个过程不发生任何的拷贝和实际执行逻辑。 无需担心这一步从 OpenGL 绑定到 Skia 的性能损耗 以下逻辑发生在每次渲染的时候 // 以下是每次画面渲染时都要执行的逻辑 // 将 EGLSurface 绑定到 Skia 上 using ( 方法,告诉 Skia 层,需要重新获取 GL 层的状态。 在 SkiaSharp 里 GRContext 表示 Skia 的 GPU 上下文,为了性能考虑,会在 Skia 里面缓存了一部分的 GPU/GL 状态,以避免每次绘制都大量地调用 glGet* 获取状态

    30410编辑于 2026-02-07
  • 来自专栏林德熙的博客

    WPF 自己封装 Skia 差量绘制控件

    使用 Skia 能做到在多个不同的平台使用相同的一套 API 绘制出相同界面效果的图片,可以将图片绘制到应用程序的渲染显示里面。 这样的绘制方法显然效率不够高 在上一篇博客里面告诉大家如何在 WPF 中使用 Skia 绘制,请看 WPF 使用 Skia 绘制 WriteableBitmap 图片 而这样的绘制方式意味着每次都需要重新绘制画布 其实在 Skia 的 SKSurface 是不需要每次绘制完成就释放,可以保存他的值 只是需要注意和 WriteableBitmap 图片一起使用时,需要在绘制之前调用 Lock 方法,在绘制完成之后调用 而如果能了解绘制的界面范围的话,可以使用 WriteableBitmap 的 AddDirtyRect 方法,通过这个方法可以让 WPF 层仅更新指定范围的内容 虽然 Skia 和 WPF 两个的绘制效率都很高 只是稍微有点 在使用 WriteableBitmap 作为 Skia 的承载,就需要再来一步,让 WriteableBitmap 在界面绘制。

    1.4K30发布于 2020-09-10
  • 来自专栏Yangsh888的专栏

    Skia 看 Android APP 图形栈内存管理要点

    Android APP 内存有一部分是 graphic 这块消耗,skia 这边对APP使用的字体字形缓存,GPU资源缓存等。 这个就是在性能和内存之间取平衡。高性能,就缓存多些。要内存就回收狠些。 skia 对APP在前台和后台内存阈值也有区分。退后台后阈值减少50%。 鸿蒙继续通过 prop 可以动态调整,默认值再少10%。 但是 skia 系统默认值都一样。这块是有客制化空间的。对典型APP,这块可以增加一部分定制。

    14800编辑于 2025-11-12
  • 来自专栏林德熙的博客

    dotnet 简单聊聊 Skia 里的 SKFontMetrics 的各项属性作用

    本文将和大家简单聊聊 Skia 里的 SKFontMetrics 的各项属性作用和代表的含义 熟悉文本排版的伙伴也许对于字体的 Metrics 概念不陌生,在 Skia 里面提供的 SKFontMetrics 只是略微有所不同的是 Skia 多加了对字体大小的加工,即 SKFontMetrics 获取到的属性已经是和 SKFont 的 Size 相关 如下图所示,是我绘制的示意图 通过以上示意图再配合咱小学学到的四线三格知识 它通常用于调整字体大小和行高,以确保小写字母的清晰显示 由此可以看到和 DriectX 的 DWRITE_FONT_METRICS 结构体比较相似 在 Skia 里面,通过 DrawText 方法绘制文本时 里面计算出 baseline 基线的方法是通过 Ascent 属性计算出来的,在 Skia 里面取 Ascent 的绝对值就是 baseline 基线的值 排版里面的字高就是再 baseline + 最多只关心排版字高 行距部分会比较复杂,我自己建立的文本库就准备尝试模拟 WPF 的行距算法或 PPT 的行距算法,详细请看 dotnet OpenXML 聊聊 PPT 文本行距行高计算公式 行距的计算无法在 Skia

    37110编辑于 2025-07-24
  • 来自专栏Rust语言学习交流

    【大家的项目】基于 Rust + Skia 的 2D 图形 Vue 渲染库

    最新更新: 在 <v-image> 新支持 :blur :grayscale :brighten :invert 等滤镜相关属性 blur Live Demo: https://vue-skia.netlify.app Repo: https://github.com/rustq/vue-skia

    34210编辑于 2024-04-24
  • 来自专栏盟主来了

    2021.12.12日报:非ComplexPath下,skia显示黑体字有问题

    style="FONT-SIZE: 12pt" face="黑体"> 
    然后如果不开启ComplexPath,skia 会显示空格变成一个方框,不知道是不是skia的bug。

    48720编辑于 2021-12-14
  • 来自专栏林德熙的博客

    WPF 解决 Skia 因为找不到字体而绘制不出中文字符

    在 WPF 使用 Skia 做渲染工具,如果绘制的中文都是方块,也许是字体的问题。 字体的问题是 Skia 没有找到字体,本文告诉大家如何修复 在 Skia 使用特定字体,可以使用 SkiaSharp 的 SKTypeface 方法指定 var name = " 微软雅黑"; var skTypeface = SKTypeface.FromFamilyName(name); 但是如何判断 Skia 找不到字体? 需要在绘制之后调用 Dispose 是否字体 ---- 本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF-%E8%A7%A3%E5%86%B3-Skia

    1.2K10发布于 2020-09-03
  • 来自专栏大龄程序员的人工智能之路

    使用不同的编译器编译 Skia,性能差距居然这么大

    Skia 是一个开源的 2D 图形库,提供路径、文本、图像和渲染等图形处理功能。它最初由 Skia Inc. 之前都是在 Android 系统上使用 Skia,最近由于项目需要,需要在 Windows 上使用 Skia 进行图形处理,所以就按照文档在 Windows 下编译出 Skia 图形库。 在 Skia 的官方文档上有这样一句话: Skia uses generated code that is only optimized when Skia is built with clang. skia_use_system_zlib=false skia_use_system_harfbuzz=false skia_use_system_icu=false skia_enable_skparagraph skia_use_system_zlib=false skia_use_system_harfbuzz=false skia_use_system_icu=false skia_enable_skparagraph

    2K10编辑于 2024-06-03
  • 来自专栏林德熙的博客

    Skia 在龙芯搭景嘉微显卡设备 某些字体会渲染相互覆盖

    此问题是先在 Avalonia 应用上发现的,后续调查了解到是 Skia 底层的问题。本文将记录此问题和提供规避方法 以下是我的一个 Avalonia 应用上的文本渲染效果。 详细请看 https://github.com/AvaloniaUI/Avalonia/blob/dfd3b8864dd1abc06995eabf2ab225a85c00deb2/src/Skia/Avalonia.Skia /GlyphRunImpl.cs#L65 namespace Avalonia.Skia { internal class GlyphRunImpl : IGlyphRunImpl {

    20210编辑于 2025-11-12
  • 来自专栏深度学习与python

    硬核万字长文:我是如何把Skia的体积“缩小”到18的?

    目前为止我通过官方的编译选项来对 Skia 进行编译裁剪,二进制体积依旧很大。 所以如何把 Skia 裁剪到 1/8? 答案是重写一个(认真严肃)!!! 目前渲染器已经基本完成,关键节点的性能测试和 Skia 处于同一水平(甚至还要好一些)。 比如 Windows 下的 GDI/GDI+/Direct2D,Android 下的 Skia/HWUI(HWUI 对一些复杂多边形的处理依旧依赖 Skia 的软绘制,所以不能算完备的矢量渲染器),MacosX Skia 中使用 SkRegion 这个数据结构来对这个算法进行描述。   同样的 Skia 的 SKSL 编译器需要内置到 Skia 的核心逻辑中难以剥离。 由于 Skia 的历史非常悠久,存在相当多的 legacy 性质的代码和模块。

    3.3K10编辑于 2023-04-01
  • 来自专栏林德熙的博客

    从 Uno Platform 4 更新 Uno Platform 5 的迁移方法

    Include="Uno.WinUI.Skia.Linux.FrameBuffer" Version="4.10.13" /> + <PackageVersion Include="Uno.WinUI.<em>Skia</em>.Linux.FrameBuffer Include="Uno.WinUI.Skia.Wpf" Version="5.0.143" /> Skia.WPF 这里有大改的部分,不仅仅只是修改命名空间 之前的 WpfHost 是放入到具体的 更换了命名空间,从原本的 Uno.UI.Runtime.Skia.FrameBufferHost 变更为 Uno.UI.Runtime.Skia.Linux.FrameBuffer.FrameBufferHost 命名空间下的类型 只需加上 using Uno.UI.Runtime.Skia.Linux.FrameBuffer; 即可 Skia.Gtk 更换了命名空间,从原本的 Uno.UI.Runtime.Skia.GtkHost 变更为 Uno.UI.Runtime.Skia.Gtk.GtkHost 命名空间下的类型 只需加上 using Uno.UI.Runtime.Skia.Gtk; 即可

    33910编辑于 2024-01-18
  • 来自专栏王小二的Android站

    [074]RenderEngineType简介

    enum class RenderEngineType { GLES = 1,//opengl THREADED = 2,//opengl异步线程 SKIA_GL = 3,//skia SKIA_GL_THREADED = 4,//skia异步线程 }; 同步 异步 skia SKIA_GL SKIA_GL_THREADED opengl GLES THREADED ,目前窗口的blurs效果,只在skia实现上 opengl模式不支持blurs。 细心你可能会发现前面SKIA_GL_THREADED的drawlayers中并没有发挥异步的作用。本质上还是会Block SF的主线程。 但是据说可能一些极限情况的下并发读写的问题,我相信后续android会不断的完善SKIA_GL_THREADED,后续可能就渐渐放弃GLES了。

    2.9K30编辑于 2022-05-13
  • 来自专栏张善友的专栏

    .NET跨平台绘图基础库--SkiaSharp

    Skia是个2D向量图形处理函数库,包含字型、座标转换,以及点阵图都有高效能且简洁的表现。 不仅用于Google Chrome浏览器, Android开放手机平台也采用Skia作为绘图处理,搭配OpenGL/ES与特定的硬体特征,强化显示的效果 自2005年Skia被Google收购后,一直相当神秘低调 ,直到2007年初,Skia GL相关的源代码才被揭露,作为Google Android平台的图形引擎,稍后的Google Chrome浏览器也采用Skia引擎。 而Android与Chrome的代码库中都有一份[skia]的复制,因需求不同,做了部份的修改,比方说Chrome专案底下的 [chrome/trunk/src/skia],需要注意的是,Skia本身是不涉及底层环境 ,并且引入了 GPU 互操作功能,这使得 Avalonia 能够与 GPU 更高效地工作,从而提高渲染性能和视觉效果,然而,需要注意的是,AvaloniaUI 使用的 Skia 是一个有限的 Skia

    1.2K10编辑于 2025-02-04
  • 来自专栏ASP.NETCore

    ASP.NET Core使用SkiaSharp实现验证码

    Skia Skia是一个开源的二维图形库,提供各种常用的API,并可在多种软硬件平台上运行。 Skia由谷歌出资管理,任何人都可基于BSD免费软件许可证使用SkiaSkia开发团队致力于开发其核心部分, 并广泛采纳各方对于Skia的开源贡献。 SkiaSharp SkiaSharp是由Mono发起,基于谷歌的Skia图形库,实现的一个跨平台的2D图形.NET API绑定。 = SkiaCaptcha.Captcha.GetCaptcha("hello world"); return File(bytes, "image/png"); } 参考 https://skia.org developer.xamarin.com/api/namespace/SkiaSharp/ demo地址 https://github.com/maxzhang1985/ASPNETCore_Captcha_Skia

    3.3K20发布于 2018-09-05
  • 深度解析:Flutter 与 OpenHarmony 融合架构下的跨平台渲染机制与系统级集成

    Flutter 与 OpenHarmony 融合架构下的跨平台渲染机制与系统级集成 作者:晚霞的不甘 日期:2025年12月2日 关键词:Flutter Embedder、OpenHarmony 图形栈、Skia 一、图形渲染:从 Skia 到 Rosen 的桥梁 1.1 Flutter 的渲染架构回顾 Flutter 的 UI 渲染完全绕过原生控件系统,其流程如下: Widget Tree → Element Window Surface 关键点在于:Skia 需要一个可绘制的 Surface(如 Android 的 SurfaceTexture、iOS 的 CAMetalLayer)。 并绑定到 Skia // ohos_surface.cc sptr<RSSurface> surface = RSSurface::CreateSurface(); sk_sp<SkSurface> skia_surface 3.1 技术瓶颈分析 限制因素 Flutter 影响 内存 < 64MB Dart VM 最低需 ~30MB,Skia 渲染缓存需 10–20MB 无 GPU Skia 软件渲染 CPU 占用高,帧率

    27910编辑于 2025-12-23
  • 来自专栏逆锋起笔

    为什么那么多公司钟爱 Flutter ?

    【Andriod 操作系统中,编写的原生控件中实际上也是依赖于 Skia 进行绘制,所以 Flutter 在某些 Andriod 操作系统上甚至还要高于原生-因为原生 Andriod 中的 Skia 必须随着操作系统进行更新 GPU 将信号同步到 UI 线程 UI 线程用 Dart 来构建图层树 图层树在 GPU 线程中合成 合成后的视图数据提供给 SKia 引擎 Skia 引擎通过 OpenGL 或者 Vulkan 将显示内容提供给 B 在屏幕上显示之后,发出 Vsync 信号,A 开始绘制,但是由于绘制时间过长,第二个 B 位置又产生了 Jank ▐ 4.4 渲染引擎 Skia Skia(全称Skia Graphics Library Skia 已然是 Android 官方的图像渲染引擎了,因此 Flutter AndroidSDK 无需内嵌 Skia 引擎就可以获得天然的 Skia 支持;而对于 iOS 平台来说,由于 Skia 是跨平台的 也就是说,Skia 保证了同一套代码调用在Android 和 iOS 平台上的渲染效果是完全一致的。

    2.6K20发布于 2021-02-26
  • 来自专栏个人路线

    Flutter 2 源码阅读

    其中 dart:ui 库是对 Engine 中 Skia 库的 C++ 接口的绑定。 向上层提供了 window、text、canvas 等通用的绘制能力,通过 dart:ui 库就能使用 Dart 代码操作 Skia 绘制引擎。 2)、Engine:Engine 使用 C++ 实现,主要包括:Skia,Dart 和 Text。Skia 是开源的二维图形库,提供了适用于多种软硬件平台的通用 API。 在安卓上,系统自带了 Skia,在 iOS 上,则需要 APP 打包 Skia 库,这会导致 Flutter 开发的 iOS 应用安装包体积更大。

    68320发布于 2021-08-13
领券