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

news2024/10/5 15:05:00

文章目录

  • 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 平台上创建丰富的用户界面、图像处理应用程序、游戏和数据可视化工具。

主要特点

  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
新建SkiaSharpSample
通过NuGet,搜索SkiaSharp.Views.WindowsForms,安装相关库
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();
}
  1. 定义一个用于绘制的SKPaint(相当于笔刷)
  2. 清空背景色(默认为是黑色)
  3. 使用DrawText绘制文本
    SkiaSharp
    窗体完整代码
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吧。
SkiaSharp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1813702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

绘唐科技官网

绘唐科技AI工具是一系列经过训练的人工智能工具,旨在提供各种智能化的解决方案。这些工具可以应用于多个领域,包括自然语言处理、图像识别、语音识别、机器学习等。 其中,自然语言处理工具可以帮助用户处理和理解文本数据。它可以实现文本分类…

150W无感功率电阻器

特点:1x150 W/2x60 W/3x33 W功率 SOT-227模具封装两种不同的端子选项 可供选择良好的机械可靠性 无感设计 电阻值:0.5Ω≤ 1MΩ 耐抗精度:1%- 10 % 温度系数:50 ppm/℃- 250 ppm/℃(25℃-105℃) 额定功率:150W 70℃ bottom case tempe…

Thinkphp一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码

Thinkphp一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码,喜欢的朋友可以下载研究 一文鸡富贵鸡玫瑰庄园富农场仿皮皮果理财农场源码

8-1RT-Thread消息队列

8-1RT-Thread消息队列 消息队列又称队列,是一种常用于线程间通信的数据结构。 消息队列控制块里有两个链表,空闲列表用来挂接空的小几块,另一个链表是用来挂接存有消息的消息框。其中消息链表头指向消息队列当中的第一个消息框,而…

Python 制作词云图

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

LabVIEW处理大量数据时,怎样确保数据的准确性和完整性?

在LabVIEW处理中,确保大量数据的准确性和完整性至关重要。以下是详细的多角度分析和建议,以确保在LabVIEW中处理大量数据时,数据的准确性和完整性: 1. 数据采集阶段 1.1 高精度硬件选择 选择高精度的数据采集硬件,如…

C++设计模式---装饰器模式

1、介绍 装饰器(Decorator)模式是一种结构型设计模式,它允许你动态地给一个对象添加额外的职责。 装饰器模式主要用于扩展对象的功能,而又不改变其原有结构。在C中,装饰器模式主要应用于那些需要为对象动态添加功能或改…

STM32定时器输出pwm的几种模式

目录 定时器 输出脉冲模式: PWM模式(PWM Mode) 输出比较模式(Output Compare Mode) 总结 占空比: 输出比较模式与占空比 PWM模式与占空比 输出比较模式与PWM模式的结合 输出比较模式实例&#xf…

C++ Primer Plus第五版笔记(p201-250)

第六章 函数(下) 在含有return语句的循环后面应该也有一条return语句 不要返回局部对象的引用或指针,当函数结束时临时对象占用的空间也就随之释放掉了,所以两条return语句都指向了不再可用的内存空间。 如果函数返回指针、引用…

甲板上的战舰|模拟?|每日一题|chatgpt结合更正

文章目录 我的天免费的4o太好用了我的天免费的4o太好用了我的天免费的4o太好用了题目详情思路:关键:chatGPT配合纠正错误思路正确代码: 我的天免费的4o太好用了 我的天免费的4o太好用了 我的天免费的4o太好用了 重要的事情说三遍 题目详情…

螺栓拧紧力矩标准

据德国VOITH提供Nm换算所得 螺栓扭矩表 (单位:Nm、Kgm) Nm0.101972mKg M6~M24螺钉或螺母的拧紧力矩操作者参考 ★对于设计图纸有明确力矩要求的;应按图纸要求执行… 套管螺母紧固力矩Q/STB B07833-1998 材料 HPb63-3Y2 直通式压注油杯 Q/STB B07020-1998螺纹M6、…

CD工具AWX之作业模板与工作流模板

一、概要 本文以php和h5项目为示例,讲述从初始化项目到更新发布的实现详情。 它们跟java/go等进程程序不同,只需要下发.php等静态文件即可,不涉及进程的重启。 对于php项目,除了php文件外,还包括.env配置文件。&…

【C++】STL空间配置器

STL空间配置器 一、什么是空间配置器二、为什么需要空间配置器三、SGI-STL空间配置器实现原理1、 一级空间配置器2、二级空间配置器 四、优缺点分析 一、什么是空间配置器 STL 有六大组件分别是:容器,算法,迭代器, 空间配置器&am…

【最新鸿蒙应用开发】——类Web开发范式2——前端语法

兼容JS的类Web开发范式 JS FA应用的JS模块(entry/src/main/js/module)的典型开发目录结构如下: 1. 项目基本结构 1.1. 目录结构 1.2. 项目文件分类如下: .hml结尾的HML模板文件,这个文件用来描述当前页面的文件布局结构。 .css结尾的CSS样…

Wall国内开源程序照片墙,支持VR全景及安装教程

下载 GitHub官网:https://github.com/zhang-tong-yao/wall 软件下载:https://github.com/zhang-tong-yao/wall/releases,推荐下载最新的版本。 演示效果 目前支持PC端和移动端自适应。 演示地址:https://demo-wall.ityao.cn …

芯片键合电阻器

引线键合电阻器(绑定电阻器)超稳定,可靠性高。激光修整至严格公差。可自定义的值和该值的唯一标记。该器件非常适合但不限于混合电路应用。与二极管芯片,MOS芯片,IGBT芯片键合封装。 芯片键合电阻器优势和特点 顶部触…

探索AOSP中的RRO:运行时资源覆盖的奥秘

探索AOSP中的RRO:运行时资源覆盖的奥秘 在Android开发中,为了提供更大的灵活性和可定制性,Android提供了一种关键特性:运行时资源覆盖(Runtime Resource Overlay,简称RRO)。本文将深入探讨RRO在Android开源项目(AOSP)中的作用及其实现方法。 什么是运行时资源覆盖(…

Vue19-key的原理

一、v-for中key的作用 给节点进行一个标识&#xff0c;类似于身份证号。 1-1、需求1&#xff1a; 点击按钮&#xff0c;在<li>的最前面添加一个老刘的信息 <body><div id"root"><h1>人员信息</h1><button click.once"add&qu…

A股上市公司长短期并购绩效CAR、BHAR数据(2008-2022年)

数据简介&#xff1a; 短期并购绩效以首次公告日前后5个交易日内持有并购方股票的累计超额回报率[CAR(-5,5)]作为短期并购绩效的衡量指标。为计算并购方的累计超额回报率&#xff0c;定义首次公告日前的150个交易日至首次公告日前的30个交易日为估计窗口期&#xff0c;以窗口期…

今日成果2024-6-7 TrustZone TEE安全SDK开发指南

Rockchip Vendor Storage Application Note.pdf OK 开机下&#xff0c;可以实现Vendor Storage的读写。 0ms时同步RTC时间 OK Rockchip_Developer_Guide_TEE_SDK_CN.pdf 什么是TrustZone 此系统方法意味着可以保护安全内存、加密块、键盘和屏幕等外设&#xff0c;从而可确…