【SkiaSharp绘图】01使用SkiaSharp绘制Hello World

文章目录

SkiaSharp简介

SkiaSharp 是一个跨平台的 2D 图形库,用于 .NET 平台。它是 Skia 图形引擎的 .NET 绑定,提供了高性能的绘图和图形处理功能。SkiaSharp 允许开发人员在 .NET 平台上创建丰富的用户界面、图像处理应用程序、游戏和数据可视化工具。

主要特点

  1. 跨平台性:SkiaSharp 可以在 Windows、macOS、Linux、Android 和 iOS 等多个平台上运行,实现了真正的跨平台开发。

  2. 高性能:SkiaSharp 底层使用 Skia 图形引擎,它是一个经过优化的 2D 图形渲染引擎,具有高效的绘制速度和优秀的渲染质量。

  3. 丰富的绘图功能:SkiaSharp 提供了丰富的绘图功能,包括路径绘制、图像渲染、文本布局、渐变和阴影效果等,可以满足各种绘图需求。

  4. 易用性:SkiaSharp 提供了简洁易用的 API,易于学习和使用。开发人员可以通过少量的代码实现复杂的图形效果。

  5. 开源和免费:SkiaSharp 是开源项目,基于 MIT 许可证发布,可以免费使用和修改。

  6. 与 .NET 生态系统集成:SkiaSharp 可以与 .NET 平台上的其他框架和库集成,如 Xamarin.Forms、ASP.NET Core、Unity 等,方便开发人员构建全栈应用程序。

适用场景

  1. 移动应用程序开发:SkiaSharp 可以用于开发移动应用程序,包括 Android 和 iOS 平台上的原生应用和跨平台应用。

  2. 桌面应用程序开发:SkiaSharp 可以用于开发桌面应用程序,包括 Windows、macOS 和 Linux 平台上的应用。

  3. 游戏开发:SkiaSharp 可以用于开发 2D 游戏,并与 Unity 引擎集成,实现更复杂的游戏效果。

  4. 图像处理和数据可视化: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事件中实现如下代码

csharp 复制代码
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();
}
  1. 定义一个用于绘制的SKPaint(相当于笔刷)
  2. 清空背景色(默认为是黑色)
  3. 使用DrawText绘制文本

    窗体完整代码
csharp 复制代码
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吧。

相关推荐
gc_22992 个月前
C#基于SkiaSharp实现印章管理(5)
c#·skiasharp·印章·五角星
gc_22992 个月前
C#基于SkiaSharp实现印章管理(4)
c#·skiasharp·印章