首页 > 其他分享 >.NET跨平台绘图基础库--SkiaSharp

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

时间:2024-09-29 11:14:26浏览次数:9  
标签:渲染 -- SkiaSharp 跨平台 绘图 Skia NET

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

 

SkiaSharp 是一个跨平台的 2D 图形 API,用于 .NET 平台,基于 Google 的 Skia 图形库。它提供了全面的 2D API,可以在移动、服务器和桌面模型上渲染图像。SkiaSharp 可以在多个 .NET 平台上使用,包括 ASP.NET Core、WPF、Winform、MAUI、AvaloniaUI 和 Uno。

Skia是个2D向量图形处理函数库,包含字型、座标转换,以及点阵图都有高效能且简洁的表现。不仅用于Google Chrome浏览器, Android开放手机平台也采用Skia作为绘图处理,搭配OpenGL/ES与特定的硬体特征,强化显示的效果

自2005年Skia被Google收购后,一直相当神秘低调,直到2007年初,Skia GL相关的源代码才被揭露,作为Google Android平台的图形引擎,稍后的Google Chrome浏览器也采用Skia引擎。随着Android与Chrome (开源版本称为"Chromium")两大平台公布源代码后,skia也一并公开源代码,以Apache License v2发布(注意,这意味着与GPLv2授权不相容) ,而Android与Chrome的代码库中都有一份[skia]的复制,因需求不同,做了部份的修改,比方说Chrome专案底下的 [chrome/trunk/src/skia],需要注意的是,Skia本身是不涉及底层环境,如Linux Framebuffer或Gtk+衔接的处理,这也是何以Android (通过Linux Framebuffer)与Chrome (开发中的Linux版本使用Gtk+)需要提供一份修改,以便系统接轨。

SkiaSharp是一个强大跨平台绘图框架,可以用SkiaSharp在WPF、安卓Xamarin.Forms客户端绘图,也可以用于创建PDF绘图,但是由于它不支持网页绘图,所以总觉得很遗憾,因为目前主流的浏览器都是谷歌Chrom内核,谷歌为什么不支持自家的Skia在网页直接绘图呢?如果SkiaSharp可以直接在网页绘图(Blazor webassembly),那它就是跨越全平台的绘图框架了。终于到了2021年10月12日,.NET 6发布RC2候选版本(正式发布前最后一版),宣布了一个突破性的技术:支持在Web网页上采用SkiaSharp画布绘图。这是.NET跨平台技术发展的一个创举,使用C#可以直接在网页画布上绘图,打破了JavaScript+canvas的长期垄断地位。C#是强类型语言,可以无缝对接从服务端获取的结构化数据,有效提高开发效率和质量。

ASP.NET Core updates in .NET 6 Release Candidate 2 - ASP.NET Blog (microsoft.com)

SkiaSharp is a cross-platform 2D graphics library for .NET based on the native Skia graphics library, and it now has preview support for Blazor WebAssembly. Let’s give it a try!

在 MAUI 中,SkiaSharp 是通过 Microsoft.Maui.Graphics 库使用的。Microsoft.Maui.Graphics 是一个跨平台的图形库,它使用 SkiaSharp 作为底层渲染引擎来提供一致的 API 访问本机图形功能。这意味着开发者可以在 MAUI 应用中使用 SkiaSharp 来绘制形状、文本和保存图像。此外,SkiaSharp 还可以用于创建自定义控件,例如在 MAUI 中绘制可定制颜色和角度的轮盘或圆饼图。

对于 Uno 平台,SkiaSharp 也可以集成到 Uno 中。开发者可以通过添加 NuGet 包 "SkiaSharp" 到共享类库,并在 XAML 中添加 SkXamlCanvas 控件来使用 SkiaSharp。然而,有时可能会遇到编译问题,需要确保找到正确的命名空间。

AvaloniaUI 默认使用 Skia 渲染引擎,这是因为 AvaloniaUI 的架构设计中包含了 SkiaSharp,为了提高图形渲染性能,AvaloniaUI 在其合成渲染器中增强了图形渲染能力,并且引入了 GPU 互操作功能,这使得 Avalonia 能够与 GPU 更高效地工作,从而提高渲染性能和视觉效果,然而,需要注意的是,AvaloniaUI 使用的 Skia 是一个有限的 Skia 子集,用于 Avalonia 运行所必需的功能,不包括图像处理、图像元数据和图像解码等功能。对于需要多用途图像处理的开发者来说,SkiaSharp 是更好的选择。在使用 SkiaSharp 3.0 时,开发者需要手动包含目标平台的 NativeAssets 包.

SkiaSharp 在 MAUI、AvaloniaUI 和 Uno 中都有广泛应用,并且通过 Microsoft.Maui.Graphics 提供了一致的跨平台图形渲染能力。在不同的 .NET 平台(如 MAUI、AvaloniaUI 和 Uno)中都提供了高性能的图形渲染能力,但在移动设备上可能需要额外的优化以避免性能问题。SkiaSharp 的性能表现如下:

  1. AvaloniaUI:Avalonia 使用 SkiaSharp 作为其渲染引擎,能够实现高性能的图形渲染,并在不同操作系统上实现一致的用户界面。然而,有观点认为 Avalonia 由于基于 Skia,可能会在移动设备上遇到性能问题。

  2. MAUI:在 MAUI 中,Microsoft.Maui.Graphics 和 SkiaSharp 都是重要的库,它们为开发者提供了强大的图形绘制能力。MAUI 专为提高性能而设计,通过在原生平台控件上实现一种精简的、解耦的处理程序映射器模式,减少了 UI 渲染中的开销。

  3. Uno:SkiaSharp 与 Uno Platform 的比较中,SkiaSharp 被描述为一个跨平台的 2D 图形 API,适用于 .NET 平台,提供了全面的 2D API,可以用于移动、服务器和桌面模型来渲染图像。

应用场景上来说,它适用于多种应用场景,包括但不限于:

  • 绘图工具:SkiaSharp 可以用于开发各种绘图工具,如富文本编辑器、图像绘制工具等。例如,可以使用 SkiaSharp 创建一个功能强大的绘图工具,支持复杂的图形绘制和编辑功能。

  • 报表制作:在报表开发中,SkiaSharp 可以用于生成高质量的报表图像,支持多种数据格式和布局需求。

  • 图像生成:SkiaSharp 可以用于生成各种图像,如验证码、二维码等。例如,可以使用 SkiaSharp 生成用于身份验证的二维码。

  • 用户界面绘制:在用户界面设计中,SkiaSharp 可以用于绘制复杂的图形和动画效果。例如,可以使用 SkiaSharp 在 WPF 应用程序中实现自绘的弹动小球、粒子花园等特效。

  • 游戏开发:SkiaSharp 可以用于开发简单的游戏,如投篮小游戏,通过自绘实现游戏中的动画和交互效果。

  • PDF 绘图:SkiaSharp 还可以在 PDF 上进行绘图,支持在多种平台上生成 PDF 文件中的图形内容。

  • 跨平台应用:由于 SkiaSharp 是跨平台的,因此可以在 Windows、Linux、Android、iOS 等多个平台上使用,支持在不同设备上渲染图像和图形。

  • 开源项目:SkiaSharp 被广泛应用于各种开源项目中,如 Kimono 设计器,支持以图形化的方式创建二维图片,并生成跨平台的代码

欢迎大家扫描下面二维码成为我的客户,扶你上云

  分类: .NET

标签:渲染,--,SkiaSharp,跨平台,绘图,Skia,NET
From: https://www.cnblogs.com/sexintercourse/p/18439214

相关文章

  • 记一次触发器用最新一条记录更新另外一条记录字段值的操作
    查询数据库里面最新一条记录的正确思路数据库里面的记录肯定有时间字段,找到时间的最大值,在where里面查询最新的的时间触发器查询的时候应该加上时间限制,不然随着时间的推移查询越来越慢触发器应该是beforeinsert类型不然会存在递归引用使用oracle函数或者mysql函数来执行时......
  • SpringBoot学习笔记(一)
    源码地址(含完整笔记):https://gitee.com/Mr-Sponge/spring-boot-study主要学习以下内容:SpringBoot入门了解知识(比如:各个注解是什么意思,SpringBoot是如何封装数据到容器的,等等)前后端是如何交互的SpringBoot中的拦截器原理HTML如何实现文件上传(能否实现一个限制上传的文件类型......
  • 一次基于AST的大规模代码迁移实践
    一次基于AST的大规模代码迁移实践 作者:来自vivo互联网大前端团队-WeiXing在研发项目过程中,我们经常会遇到技术架构迭代更新的需求,通过技术的迭代更新,让项目从新的技术特性中受益,但由于很多新的技术迭代版本并不能完全向下兼容,包含了很多非兼容性的改变(BreakingChange......
  • .NET 开源高性能 MQTT 类库
    阅读目录前言项目介绍功能说明功能特点应用场景使用方法项目地址总结最后前言随着物联网(IoT)技术的迅猛发展,MQTT(消息队列遥测传输)协议凭借其轻量级和高效性,已成为众多物联网应用的首选通信标准。MQTTnet作为一个高性能的.NET开源库,为.NET平台上的MQTT客户端......
  • 【翻译】实现 Blocked Floyd-Warshall 用于解决所有对最短路径问题 C# 实现
    介绍在之前的帖子中,我们实现了Floyd-Warshall(弗洛伊德-沃沙尔算法)(四种变体)以及路由重建算法。在这些帖子中,我们探讨了所有对最短路径问题的基本概念、内存中的数据表示、并行性、向量化以及如何将算法调整为适应数据特性。在本帖中,我们将继续我们的旅程,探索一种更高效的方法来解......
  • 解决:PC微信弹窗《当前客户端版本过低,请前往应用商店升级到最新版本客户端后再登录》
    目录1.背景2.利用cheatEngine直接修改内存3.利用Python代码直接修改内存1.背景虽然人类都是喜新厌旧的,但也不是什么东西都是新的好。今天换了台服务器,发现正常使用微信,弹窗提醒说版本太低了,根本不给登录。没办法啊,机器人只兼容这个版本的,只能到处找解决方案了,没......
  • .Net 6 WebApi 项目部署到 Linux 系统上的 Docker 容器
    .Net6WebApi项目部署到Linux系统上的Docker容器 1.创建一个基础的WebApi项目  注意:因为发布时候,Dockerfile文件必须和解决方案.cspro文件放在同级,所以建议勾上这个,当时遇到这个问题,导致打包镜像时找不到.cspro文件,搞了好久  点击创建,项目基础框架是这样......
  • C# Task 实现任务超时取消、超时取消然后重试 超过重试最大次数就结束。
    C#Task实现任务超时取消、超时取消然后重试超过重试最大次数就结束。 任务超时取消示例publicstaticasyncTaskTimeoutCancelTask(){CancellationTokenSourcects=newCancellationTokenSource();//取消令牌Tasktask......
  • WPF中播放音频文件
    SoundPlayer第一种方式,就是使用SoundPlayer。优点:平台自带,使用非常简单。缺点:只支持WAV音频格式,不支持MP3格式。示例代码:SoundPlayerplayer=newSoundPlayer("BLOW.WAV");player.Play();NAudio.NET平台,音频相关的开发,经常会用到NAudio这个库。优点:用起来相对也比较简......
  • 经典强化学习算法:分层强化学习算法—options算法2(理解篇)
    论文地址:https://people.cs.umass.edu/~barto/courses/cs687/Sutton-Precup-Singh-AIJ99.pdf例子:这是一个寻路问题,该问题使用强化学习算法解决,准确的来说是使用“表格表示的强化学习算法中的规划算法”来进行解决的;之所以没有说是使用规划算法来说是因为这里使用了学习型......