文章目录
- SkiaSharp简介
- 主要特点
- 适用场景
- SkiaSharp的Hello World!
- 1、创建一个.NET Framework项目
- 2、拖入SKGLControl控件
- GLControl、SKControl、SKGLControl对比
- GLControl
- SKControl
- SKGLControl
- 选择和使用场景
- 高性能的选择 SKGLControl
- 3、绘制Hello World
- 为何选择SkiaSharp
- ImageSharp和SkiaSharp
- ImageSharp
- SkiaSharp
- 选择和使用场景
- 遇难而上
SkiaSharp简介
SkiaSharp 是一个跨平台的 2D 图形库,用于 .NET 平台。它是 Skia 图形引擎的 .NET 绑定,提供了高性能的绘图和图形处理功能。SkiaSharp 允许开发人员在 .NET 平台上创建丰富的用户界面、图像处理应用程序、游戏和数据可视化工具。
主要特点
-
跨平台性:SkiaSharp 可以在 Windows、macOS、Linux、Android 和 iOS 等多个平台上运行,实现了真正的跨平台开发。
-
高性能:SkiaSharp 底层使用 Skia 图形引擎,它是一个经过优化的 2D 图形渲染引擎,具有高效的绘制速度和优秀的渲染质量。
-
丰富的绘图功能:SkiaSharp 提供了丰富的绘图功能,包括路径绘制、图像渲染、文本布局、渐变和阴影效果等,可以满足各种绘图需求。
-
易用性:SkiaSharp 提供了简洁易用的 API,易于学习和使用。开发人员可以通过少量的代码实现复杂的图形效果。
-
开源和免费:SkiaSharp 是开源项目,基于 MIT 许可证发布,可以免费使用和修改。
-
与 .NET 生态系统集成:SkiaSharp 可以与 .NET 平台上的其他框架和库集成,如 Xamarin.Forms、ASP.NET Core、Unity 等,方便开发人员构建全栈应用程序。
适用场景
-
移动应用程序开发:SkiaSharp 可以用于开发移动应用程序,包括 Android 和 iOS 平台上的原生应用和跨平台应用。
-
桌面应用程序开发:SkiaSharp 可以用于开发桌面应用程序,包括 Windows、macOS 和 Linux 平台上的应用。
-
游戏开发:SkiaSharp 可以用于开发 2D 游戏,并与 Unity 引擎集成,实现更复杂的游戏效果。
-
图像处理和数据可视化:SkiaSharp 提供了丰富的图形处理功能,可以用于图像处理、数据可视化、图形编辑器等应用领域。
总的来说,SkiaSharp 是一个功能强大、易用灵活的跨平台 2D 图形库,适用于各种 .NET 平台上的图形和视觉应用程序的开发。
SkiaSharp的Hello World!
1、创建一个.NET Framework项目
因为本人平时使用的是.Net Framework,这里以.NET Framework下的使用SkiaSharp为例。到目前为止Nuget上最新的SkiaSharp是2.88.8版本,对于.NETFramework的版本要求是v4.6.2以上(本示例基于4.8.1,环境为VS2022)。
创建新的项目 SkiaSharpSample
通过NuGet,搜索SkiaSharp.Views.WindowsForms,安装相关库
2、拖入SKGLControl控件
成功安装SkiaSharp.Views.WindowsForms库后,工具箱会出现如图,GLControl,SKControl,SKGLControl三个库件。
GLControl、SKControl、SKGLControl对比
这三个控件都是用于在 .NET 平台上进行图形渲染的控件,但它们之间有一些区别和适用场景的差异。下面对它们进行简要的对比分析:
GLControl
GLControl 是一个用于在 Windows 平台上进行 OpenGL 渲染的控件。它提供了一个简单的方式来在 WinForms 或 WPF 应用程序中集成 OpenGL 渲染器。由于 OpenGL 是一个跨平台的开放式图形库,GLControl 在 Windows 平台上提供了一种与 OpenGL 进行交互的方式。
- 优点:
- 可以在 Windows 平台上直接使用 OpenGL 进行图形渲染。
- 可以轻松地在 WinForms 或 WPF 应用程序中集成 OpenGL 渲染器。
- 具有较好的跨平台兼容性,因为 OpenGL 是跨平台的。
- 缺点:
- 不直接支持 Skia 图形引擎,需要使用其他方式进行 Skia 图形渲染。
SKControl
SKControl 是 SkiaSharp 提供的一个用于在 .NET 平台上进行 Skia 图形渲染的控件。它允许开发人员直接在 WinForms 或 WPF 应用程序中使用 SkiaSharp 进行图形渲染。
- 优点:
- 直接支持 SkiaSharp,可以使用 SkiaSharp 提供的所有功能进行图形渲染。
- 可以轻松地在 WinForms 或 WPF 应用程序中集成 Skia 图形渲染器。
- SkiaSharp 具有良好的性能和跨平台兼容性。
- 缺点:
- 不直接支持 OpenGL 渲染,如果需要使用 OpenGL,可能需要其他方式进行集成。
SKGLControl
SKGLControl 是 SkiaSharp 提供的一个用于在 .NET 平台上进行 Skia 图形渲染,并且支持 OpenGL 渲染的控件。它结合了 SkiaSharp 和 OpenGL 的功能,提供了一种同时使用 Skia 图形引擎和 OpenGL 渲染器的方式。
- 优点:
- 同时支持 SkiaSharp 和 OpenGL 渲染,可以灵活选择使用哪种渲染方式。
- 可以在 WinForms 或 WPF 应用程序中直接使用 SkiaSharp 进行图形渲染,同时也可以使用 OpenGL 进行渲染。
- 具有 SkiaSharp 和 OpenGL 的所有功能和特性。
- 缺点:
- 相对于单独使用 SKControl 或 GLControl,可能需要更多的配置和管理。
选择和使用场景
- 如果需要在 Windows 平台上直接使用 OpenGL 进行图形渲染,可以选择 GLControl。
- 如果需要在 .NET 应用程序中使用 SkiaSharp 进行图形渲染,并且不需要使用 OpenGL,可以选择 SKControl。
- 如果需要同时支持 SkiaSharp 和 OpenGL 渲染,并且希望在 .NET 应用程序中使用这两种渲染方式,可以选择 SKGLControl。
高性能的选择 SKGLControl
下面是同时每次绘制8个正方形,共绘制一万次时,使用三种不同方式的耗时对比:
可见,在多次或复杂图形情况下,SKGLControl更有优势。(关于这个绘制方法,后续再说)
3、绘制Hello World
在SkglControl控件的PaintSurface事件中实现如下代码
private void SkglControl1_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintGLSurfaceEventArgs e)
{
var skPaint = new SKPaint()
{
Color = SKColors.Red,
TextSize = 48
};
e.Surface.Canvas.Clear(SKColors.White);
e.Surface.Canvas.DrawText("SkiaSharp! Hello World!", 20, this.Height / 2, skPaint);
skPaint.Dispose();
}
- 定义一个用于绘制的SKPaint(相当于笔刷)
- 清空背景色(默认为是黑色)
- 使用DrawText绘制文本
窗体完整代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
private void Form1_Load(object sender, EventArgs e)
{
this.skglControl1.Dock = DockStyle.Fill;
this.skglControl1.PaintSurface += SkglControl1_PaintSurface;
}
private void SkglControl1_PaintSurface(object sender, SkiaSharp.Views.Desktop.SKPaintGLSurfaceEventArgs e)
{
var skPaint = new SKPaint()
{
Color = SKColors.Red,
TextSize = 48
};
e.Surface.Canvas.Clear(SKColors.White);
e.Surface.Canvas.DrawText("SkiaSharp! Hello World!", 20, this.Height / 2, skPaint);
skPaint.Dispose();
}
}
为何选择SkiaSharp
源于未来可能需要对国产操作系统的支持,而Windows GDI+是基于Windows的,无法在国产系统上运行,所以想找一个可以代替Windows GDI+的图形渲染引擎先熟悉下(目前还没有在国产系统上试运行过SkiaSharp)。
ImageSharp和SkiaSharp
ImageSharp 和 SkiaSharp 都是在 .NET 平台上用于图像处理和绘图的库, 这里列举了网上的对比:
ImageSharp
ImageSharp 是一个用于在 .NET 平台上进行图像处理的库,它由 SixLabors 开发并维护。ImageSharp 提供了丰富的图像处理功能,包括图像加载、缩放、裁剪、旋转、滤镜、格式转换等。
-
优点:
- 轻量级:ImageSharp 设计简洁,体积小巧,适合用于需要快速加载和处理图像的场景。
- 简单易用:ImageSharp 提供了简单易用的 API,方便开发人员进行图像处理操作。
- 跨平台:ImageSharp 支持在各种 .NET 平台上运行,包括 Windows、macOS、Linux、Android 和 iOS 等。
-
缺点:
- 功能相对较简单:虽然 ImageSharp 提供了基本的图像处理功能,但在复杂的图形绘制和渲染方面相对有限。
SkiaSharp
SkiaSharp 是 Skia 图形引擎的 .NET 绑定,用于在 .NET 平台上进行图形绘制和渲染。SkiaSharp 提供了强大的 2D 图形渲染功能,支持绘制路径、图像、文本、渐变等。
-
优点:
- 强大的绘图功能:SkiaSharp 提供了丰富的绘图功能,包括路径绘制、图像渲染、文本布局、渐变和阴影效果等。
- 高性能:SkiaSharp 使用 Skia 图形引擎,具有优秀的渲染性能和质量。
- 跨平台:SkiaSharp 支持在多个 .NET 平台上运行,同时也支持在 Android、iOS 等移动平台上运行。
-
缺点:
- 学习曲线较陡:相对于 ImageSharp,SkiaSharp 的学习曲线可能会更陡峭一些,特别是对于不熟悉 Skia 图形引擎的开发人员来说。
- 体积较大:SkiaSharp 作为一个强大的图形引擎库,其体积相对较大,可能不适合于一些对文件大小要求严格的应用场景。
选择和使用场景
- 如果你只需要进行简单的图像处理操作,如加载、裁剪、缩放等,可以选择 ImageSharp,它更轻量级且易于使用。
- 如果你需要进行复杂的图形绘制和渲染操作,如绘制路径、渐变、阴影等,可以选择 SkiaSharp,它提供了更强大的绘图功能和渲染性能。 SkiaSharp 也适用于需要在移动平台上进行图形绘制的应用场景。
遇难而上
反正目前是报着学习的心态去的,何不遇难而上,所以就选择了性能更为卓越的SkiaSharp吧。