.NET 跨平台图形库 SkiaSharp 基础应用

这篇具有很好参考价值的文章主要介绍了.NET 跨平台图形库 SkiaSharp 基础应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

SkiaSharp 是适用于 .NET 和 C# 的 2D 图形系统,由开源 Skia 图形引擎提供支持,在 Google 产品中广泛使用。 可以在应用程序中使用 SkiaSharp Xamarin.Forms 绘制 2D 矢量图形、位图和文本。支持跨平台,Windows、Linux、Anroid、IOS、WebAssembly下都可以使用,底层源码是用C++实现的。

SkiaSharp 最初由 Mono 开发,目前由 Microsoft 维护,遵循 MIT License。

 SkiaSharp 图形 Xamarin.Forms - Xamarin | Microsoft Learn

在Winform中使用时,可以从NuGet 获取 SkiaSharp 类库

.NET 跨平台图形库 SkiaSharp 基础应用,C#,.net,c#

为了方便使用,把SKImage直接转换成Bitmap,需要再引入一个拓展类库,SkiaSharp.Views.Desktop.Common

.NET 跨平台图形库 SkiaSharp 基础应用,C#,.net,c# 

代码实现

using SkiaSharp;
using SkiaSharp.Views.Desktop;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SkiaSharpDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnGenerate_Click(object sender, EventArgs e)
        {
            //图片宽度
            var width = 128;
            //图片高度
            var height = 36;
            //生成随机验证码
            var code = CreateValidateCode(4);

            // 创建一个SkiaSharp画布  
            using (var surface = SKSurface.Create(new SKImageInfo(width, height)))
            {
                var canvas = surface.Canvas;

                // 清除画布  
                canvas.Clear(SKColors.White);

                // 使用SkiaSharp绘制验证码文本  
                using (var textPaint = new SKPaint())
                {
                    textPaint.Color = SKColors.Black;
                    textPaint.IsAntialias = true;
                    textPaint.TextSize = height * 0.8f; // 设置文本大小  
                    textPaint.StrokeWidth = 3;

                    var textBounds = new SKRect();
                    textPaint.MeasureText(code, ref textBounds);
                    var xText = (width - textBounds.Width) / 2;
                    var yText = (height - textBounds.Height) / 2 - textBounds.Top;

                    canvas.RotateDegrees(-5, 0, 0); // 加一点点旋转角度
                    canvas.DrawText(code, xText, yText, textPaint);
                }

                // 绘制干扰线  
                using (var linePaint = new SKPaint())
                {
                    // 半透明蓝色  
                    linePaint.Color = new SKColor(0, 0, 255, 128);
                    linePaint.StrokeWidth = 2;
                    linePaint.IsAntialias = true;

                    var random = new Random();
                    for (int i = 0; i < 8; i++) // 绘制5条干扰线  
                    {
                        float x1 = 0;
                        float y1 = random.Next(height);
                        float x2 = width;
                        float y2 = random.Next(height);
                        canvas.DrawLine(x1, y1, x2, y2, linePaint);
                    }
                }

                // 保存图像到文件  
                using (var image = surface.Snapshot())
                {
                    picTarget.Image = image.ToBitmap();
                }
            }
        }

        // 可选字符集  
        private const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        private string CreateValidateCode(int len)
        {
            // 创建一个新的随机数生成器  
            var random = new Random();

            // 生成验证码  
            string code = new string(Enumerable.Repeat(chars, len)
                .Select(s => s[random.Next(s.Length)]).ToArray());
            return code;
        }
    }
}

调用示例

.NET 跨平台图形库 SkiaSharp 基础应用,C#,.net,c#

.NET 跨平台图形库 SkiaSharp 基础应用,C#,.net,c#文章来源地址https://www.toymoban.com/news/detail-824437.html

到了这里,关于.NET 跨平台图形库 SkiaSharp 基础应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用.Net Core进行跨平台开发

    使用 .NET Core 进行跨平台开发是一种灵活的方法,可以在多个操作系统上运行 C# 应用程序。以下是在 C# 中使用 .NET Core 进行跨平台开发的一般步骤: 安装 .NET Core SDK : 在开始之前,需要安装适用于操作系统的 .NET Core SDK。可以从官方网站(https://dotnet.microsoft.com/download)下载

    2024年02月11日
    浏览(60)
  • .NET开源、跨平台的本地日记APP - SwashbucklerDiary

    今天给大家推荐一个.NET开源、跨平台的本地日记APP:SwashbucklerDiary「 侠客日记 」。 每个人的心底都有一个侠客,如影随风,陪你看过一路的风景,记得你所有的精彩。 MAUI Blazor Hybrid Masa Blazor SqlSugar Serilog .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创

    2024年02月08日
    浏览(69)
  • 跨平台图表:ChartDirector for .NET 7.1 Crack

    什么是新的 ChartDirector for .NET 7.0 支持跨平台使用,但仅限于 .NET 6。这是因为在 .NET 7 中,Microsoft 停止了用于非 Windows 使用的 .NET 图形库 System.Drawing.Common。由于 ChartDirector for .NET 7.0 依赖于该库,因此它不再支持 .NET 7 上的非 Windows 使用。 ChartDirector for .NET 7.1 NuGet 包现在包含一

    2024年02月11日
    浏览(56)
  • Net跨平台UI框架Avalonia入门-安装和使用

    Avalonia UI是是Net的跨平台UI框架,支持 Windows、Linux、iOS 和 Android,与Net其他UI框架相比,如WPF(Windows平台)、MAUI跨平台控件(Android、iOS、macOS 和 Windows),主要优势是支持Linux。在国产化的需求下,对于C#开发的程序员,Avalonia适合用来开发Linux的桌面客户端。 v11版本已经发布

    2024年02月05日
    浏览(86)
  • .Net 7 Native AOT 单文件 无依赖 跨平台

    2022.11.18 Native AOT 正式发布,不再是 实验性项目。 .Net 7 Console App WebApi 使用PublishAOT = true,直接编译 成exe,无rutime依赖,智能裁剪,体积小,启动快。 环境: 1.更新VS2022 到最新版本(支持.net 7) 2.VS2022 安装 使用C++ 桌面开发   踩坑: 1.程序里一些 没有应用到的 方法会被裁剪

    2024年02月04日
    浏览(66)
  • 一个基于.NET Core开源、跨平台的仓储管理系统

    今天给大家推荐一个基于.NET Core开源、跨平台的仓储管理系统,数据库支持MSSQL/MySQL:ZEQP.WMS。 仓储管理系统(Warehouse Management System,WMS)是一种用于管理和控制仓库操作的软件系统,它可以帮助企业实现对仓库内物品的跟踪、存储、拣选、包装和发运等全过程管理,提高仓

    2024年02月21日
    浏览(178)
  • golang实现rpc方法一:使用net/rpc库【不能跨平台】

    使用golang官方的net/rpc库实现RPC方法,使用http作为RPC的载体,通过http/net包监听客户端连接请求。 rpc服务端实现代码serverrpc.go如下 上述服务端程序运行之后,将会监听本地的8090端口,我们可以实现一个客户端程序,连接服务端并且实现RPC方法调用。 rpc客户端实现代码clientr

    2024年01月17日
    浏览(58)
  • Net跨平台UI框架Avalonia入门-安装和使用(v11版本)

    avalonia v11 版本发布了,增加了很多新的功能,Avalonia的扩展也同步升级了。 主要更新内容: 辅助功能:增加了对各种辅助工具的支持,提高了Avalonia应用程序的可用性。 输入法编辑器(IME)支持:允许在所有语言中使用屏幕键盘和输入。 合成渲染器:提供更强大、高效和灵

    2024年02月09日
    浏览(70)
  • 【微软技术栈】基于.NET MAUI跨平台电子白板的设计与实现

    1、摘 要 随着科技的发展,电子白板功能已经普及到视频会议、在线课堂、企业、学校乃至其他更多行业。在多种移动设备并存的大环境下,为每个平台(如:Android、IOS、Windows等)都编写一套代码,无论是前期开发还是后期维护,成本都会增加。另一方面,移动互联网经过

    2024年02月06日
    浏览(64)
  • 一个基于.NET Core构建的简单、跨平台、模块化的商城系统

    今天大姚给大家分享一个基于.NET Core构建的简单、跨平台、模块化、完全开源免费(MIT License)的商城系统:Module Shop。 商品:分类、品牌、单位、选项(销售属性)、属性、属性模板、属性组。 销售:订单、物流。 内容:首页配置、评论、回复。 配置:国家、用户、仓库

    2024年03月27日
    浏览(210)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包