dotnet core controller 参数(dotnet控制台使用)
dotnet core controller 参数(dotnet控制台使用)
2024-11-21 08:25:55  作者:了解他的人  网址:https://m.xinb2b.cn/know/xdp417247.html

本文将告诉大家如何在 dotnet 的控制台模式下,采用 MAUI 自绘库 Microsoft.Maui.Graphics 进行绘图,设置 Microsoft.Maui.Graphics 底层调用 Microsoft.Maui.Graphics.Skia 库的 Skia 进行具体的绘图实现,此控制台可以跨平台运行,我在本机 Win10 和 WSL 的 Ubuntu 上都运行过,输出的结果图片像素级相似。本文将告诉大家如何采用 Microsoft.Maui.Graphics 进行跨平台的自绘

在开始之前,先理清一下概念。刚正式发布的 MAUI 指的是一个跨平台的 UI 框架,而 dotnet 指的是在 UI 框架下面的运行时,这是早已实现跨平台的了。本文所说的 Microsoft.Maui.Graphics 是属于 MAUI 的一个组件,是 MAUI 的渲染层里面的一个部分。相当于直接使用 Microsoft.Maui.Graphics 就是将 MAUI 的渲染里面的一个模块拆出来独立使用。可以看到 MAUI 的设计上,渲染的一个模块是可以拆处理独立使用的


本文将从一个控制台开始,从比较基础的层面告诉大家如何使用 Microsoft.Maui.Graphics 进行绘图。我采用 Microsoft.Maui.Graphics.Skia 库的 Skia 进行具体的绘图实现,实现将画出的内容存放到本地文件

新建一个控制台项目,我将项目放在 D:\lindexi\Code\SkiaSharp\SkiaSharp\BihuwelcairkiDelalurnere 文件夹里面

按照惯例,安装 Microsoft.Maui.Graphics.Skia 的 NuGet 包。为了可以在 Windows Subsystem for Linux (WSL)适用于 Linux 的 Windows 子系统上的 Ubuntu 上运行,继续添加 SkiaSharp.NativeAssets.Linux.NoDependencies 库,详细请看 dotnet 修复在 Linux 上使用 SkiaSharp 提示找不到 liblibSkiaSharp 库

添加完成库的 csproj 项目文件内容如下

<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Maui.Graphics.Skia" Version="6.0.403" /> <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.88.0" /> </ItemGroup></Project>

在 Program.cs 加上命名空间引用

using Microsoft.Maui.Graphics;using Microsoft.Maui.Graphics.Skia;using SkiaSharp;

在 Microsoft.Maui.Graphics 里,一切的逻辑都是从 ICanvas 画板开始。这是一个接口,可以采用 SkiaCanvas 来进行实现,代码如下

var skiaCanvas = new Skiacanvas();

而 SkiaCanvas 需要有一个具体的 Skia 绘制的画板,也就是 Canvas 属性。接下来开始构建 Skia 的画板,采用的是图片的方式,让 Skia 绘制到图片上

先新建图片的信息

var skImageInfo = new SKImageInfo(1920, 1080, SKColorType.Bgra8888, SKAlphaType.Opaque, SKColorSpace.CreateSrgb());

我喜欢配置颜色采用 Bgra8888 的格式。在通用性上来说,这个 Bgra8888 是 B(Blue蓝色) G(Green绿色) R(Red 红色) 和 A(Alpha透明度) 每个分量各 8 个位的 32 位表示一个像素的格式,由于足够简单,被很多个平台和框架和硬件所支持。尽管 Bgra8888 不是效率最高的方式,但好在简单也方便理解,同时也在多个平台可以方便共用,因此在不确定选什么颜色的时候,默认采用这个格式也是不错的

通过 SKImage.Create 方法创建出图片,这个图片不是只存放磁盘里的图片,而是 Skia 的一个概念

using var skImage = SKImage.Create(skImageInfo);

为了在此 SKImage 上绘制,需要取出 SKBitmap 对象,放入到 SKCanvas 里,代码如下

using (SKBitmap skBitmap = SKBitmap.FromImage(skImage)){ using (var skCanvas = new SKCanvas(skBitmap)) { }}

于是就获取到了 SKCanvas 的对象,可以放入到 SkiaCanvas 里面

using (SKBitmap skBitmap = SKBitmap.FromImage(skImage)){ using (var skCanvas = new SKCanvas(skBitmap)) { var skiaCanvas = new SkiaCanvas(); skiaCanvas.Canvas = skCanvas; }}

如此即可拿到 ICanvas 的对象,这一层就是抽象的,无论具体的底层绘制采用的是什么基础,业务用 ICanvas 类型

var skiaCanvas = new SkiaCanvas(); skiaCanvas.Canvas = skCanvas; ICanvas canvas = skiaCanvas;

以上就完成了将 Microsoft.Maui.Graphics 的具体绘制底层逻辑更换使用为 Skia 进行绘制。相似的可以替换为采用 WPF 进行绘制,详细请看 WPF 使用 MAUI 的自绘制逻辑

接下来就是尝试画一条线段测试一下

canvas.StrokeSize = 2; canvas.StrokeColor = Colors.Blue; canvas.DrawLine(10, 10, 100, 10);

将画出的内容保存到图片文件,就需要回到 SkiaSharp 的逻辑

var FileName = $"xx.png"; skCanvas.Flush(); using (var skData = skBitmap.Encode(SKEncodedImageFormat.Png, 100)) { var file = new FileInfo(fileName); using (var fileStream = file.OpenWrite()) { fileStream.SetLength(0); skData.SaveTo(fileStream); } }

完成代码,先在 Windows 上运行一下,可以看到输出了图片如下


接下来进入 WLS 也运行一下代码


输出的图片和在 Windows 上输出的图片文件是完全二进制相同的

更多细节请看 绘制图形对象 - .NET MAUI Microsoft Docs

更多的 MAUI 相关博客,还请参阅我的 博客导航

本文的例子放在github 和 gitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git initgit remote add origin https://gitee.com/lindexi/lindexi_gd.gitgit pull origin d910685120d0a4be91792685ada4bd9c967f6e4a

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origingit remote add origin https://github.com/lindexi/lindexi_gd.gitgit pull origin d910685120d0a4be91792685ada4bd9c967f6e4a

获取代码之后,进入 SkiaSharp\BihuwelcairkiDelalurnere 文件夹

文章来自https://www.cnblogs.com/softwarearch/p/16427413.html

  • 剪纸手工简单易学花(教你学习如何剪纸制作漂亮的立体掌中花)
  • 2024-11-22教你学习如何剪纸制作漂亮的立体掌中花传承手工艺术,放飞指尖梦想,每一节教学我们都会认真对待!只为传递手工技艺,创意源于生活,细节决定品质,今天为大家分享如何剪纸制作立体掌中花的教学,步骤详细,简单易学,喜欢创意剪纸纸花的朋友们,可以来看。
  • 感谢母亲给予生命的唯美句子(盘点感谢母亲给予生命的句子)
  • 2024-11-22盘点感谢母亲给予生命的句子母亲给予我们生命的体验,我们感激;母亲使我们茁壮成长,我们感激;母亲给予我们的教育和开导,使我们获取知识和力量,我们感激;在我们的生命里,总会有困难和曲折,是母亲给予我们关怀和帮助,我们更应感激感谢母。
  • 切换造浪模式怎么玩(陆冲还能这样玩)
  • 2024-11-22陆冲还能这样玩城市造浪!2022陆冲漫游冲浪,既可以在海洋,也可以在陆地!这个夏天,陆地冲浪无疑成为了让年轻人们着迷的驭风运动只需一块板、一群伙伴和一块空地,陆冲就能让你成为一名不折不扣的“造浪者”,冒险、释放、表。
  • 一起跳舞吧主持人(一起跳舞吧南昌站)
  • 2024-11-22一起跳舞吧南昌站这几天南方又是一轮降温降雨,但是昨晚南昌某一处的温度持续走高这次的“异变”究竟是什么原因呢?“一起跳舞吧”——南昌站2020/10/17第九场突围赛—南昌站10月17日在南昌红谷滩盛大开幕小编被观众火。
  • 荀彧怎么死的(荀彧简介)
  • 2024-11-22荀彧简介荀彧有着明士的节操以及对汉王朝割舍不断的情怀,在发现曹操独断朝纲并且欲成魏公的时候,并不支持,因此违逆了曹操的意思,最终被曹操逼迫自杀荀彧(xúnyù)(163年-212年),字文若颍川郡颍阴县(今河。
  • 万人迷陈好个人剧照(万人迷陈好深夜聚餐)
  • 2024-11-22万人迷陈好深夜聚餐3月1日晚,有媒体拍到陈好与老公和好友一起聚餐的画面,当天突遇下雨,陈好夫妻和好友带子女在商场外停留等车街边的陈好身穿黑色风衣,简单的马尾辫,打扮舒适简单,在众人中间仍然气质出众和好友交谈的状态也非常。
  • 有哪些零食不会增肥(这些零食最容易增肥)
  • 2024-11-22这些零食最容易增肥想要减肥,这些高能量零食你可不能吃常见的高脂、高糖、高能量零食包括:各种饼干和曲奇当然也包括各种烘烤类甜食和面包房里出售的各种西式小点,很多女孩对此类食物没有抵抗力现在,当您在打算把一片巧克力或曲奇塞。
  • 可以做公司公章的软件(一个非常实用的加盖电子公章的工具)
  • 2024-11-22一个非常实用的加盖电子公章的工具大家好,我是野生程序员一灯今天分享一个python开发的小GUI项目:电子签章器客户的需求是这样的:客户是一个不小的中药生产和批发企业,每天都需要为它的客户提供大量的药品质量检测纸质文件,并且需要在纸。
  • 关于乐伯的故事 伯乐与乐伯
  • 2024-11-22关于乐伯的故事 伯乐与乐伯“伯乐”大部分人都明白是什么意思,但我说的“乐伯”,其实是勒脖有些半脑,一看到某某人在外XX成功了,就马上说,为什么不回来报效XX呢?请问:“他不成功的时候,你正眼看过他吗?”“没有”“那时候他在哪、。
  • 花卷这样做香甜柔软好看又好吃(教你一个新做法)
  • 2024-11-22教你一个新做法花卷别再拧了,教你一个新做法,妈妈的得意之作,超级好吃又简单喜欢吃面食的给你们推荐一个油花卷做法,绝对是我妈妈的得意之作了,超级好吃,秒杀外面一切的花卷馒头和花卷是最基础的发面食品,只要掌握了做发面的。