dotnet core controller 参数(dotnet控制台使用)
dotnet core controller 参数(dotnet控制台使用)
2024-06-01 08:43:49  作者:了解他的人  网址:https://m.xinb2b.cn/tech/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 的设计上,渲染的一个模块是可以拆处理独立使用的

dotnet core controller 参数(dotnet控制台使用)(1)

本文将从一个控制台开始,从比较基础的层面告诉大家如何使用 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 上运行一下,可以看到输出了图片如下

dotnet core controller 参数(dotnet控制台使用)(2)

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

dotnet core controller 参数(dotnet控制台使用)(3)

输出的图片和在 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

  • 如何让阿拉伯数字自动生成大写(9876显示玖仟捌佰柒拾陆)
  • 2024-06-029876显示玖仟捌佰柒拾陆Excel基础操作精选第-4.1-节数据类型的简单认识工作中经常需要将阿拉伯数字表示的金额转换成中文的数字金额,直接输入应该是最容易想到的了,现在的输入法大部分都支持辅助输入,不过对于数据已经录入好的。
  • 安徽新一轮冷空气雨雪(未来一周多冷空气影响)
  • 2024-06-02未来一周多冷空气影响大皖新闻讯据安徽气象微信公众号消息,昨天(9日)沿江江北东部和江南中东部部分地区出现小雨今天早晨沿淮淮北大部分地区和淮河以南部分地区出现大雾(共39个市县),其中有16个市县小于200米(强浓雾),固。
  • 对待单位小人的技巧(单位里面的小人防不胜防)
  • 2024-06-02单位里面的小人防不胜防粉丝咨询:被单位里面的小人伤透了心,平日子大家笑哈哈的,可是一到了利益冲突的时候,就在背后使阴招前段时间单位里面评选年终考核先进个人,因为名额有限,所以大家都使出浑身解数,有的老实人主动加班,有的小人。
  • 明代最具影响的十大神枪是(古代十把扬名天下的神枪)
  • 2024-06-02古代十把扬名天下的神枪古代的战场上不像现在,飞机坦克一顿狂轰滥炸,甚至都不要人上战场,一场战争就被操控结束了在古代冷兵器战场上,士兵都是基本都是用的是长兵器,正所谓一寸长一寸强,在万军冲击的战场上谁能率先击倒敌人,谁就能获。
  • 电车48v算什么车(電動車到底算不算機動車)
  • 2024-06-02電動車到底算不算機動車不管是在馬路上開車還是行走中的過馬路,最讓我害怕的就是電動車,用風馳電掣那是一點不誇張,不管是什麼信號燈,彷彿在他們眼裏什麼都阻礙不了他們的行駛,不過也有遵守交通法規的人,按交通指示燈行駛的,但是那樣。
  • 猫咪的7大不良行为(猫主子最害怕的惩罚方式)
  • 2024-06-02猫主子最害怕的惩罚方式毕竟猫咪还是比较向往自由且活泼可爱的动物,所以在饲养的过程中,它们难免会犯一些小错对于猫咪主子来说,以下是它最害怕的惩罚方式,每一个对于它来说,都是“死穴”“拿黄瓜吓唬它”应该很多铲屎官都听说过猫咪非。
  • 程晓玥和何穗合照(闺蜜何穗送祝福)
  • 2024-06-02闺蜜何穗送祝福今天是程晓玥生日,身为闺蜜的何穗更是送上了有爱的生日祝福,还晒了两人的亲密合照,可以看出两人之间的感情真的很好呢!据悉,两人是因为一起参加青春旅社而成为好朋友,。
  • 早泄如何自我治疗好(关于早泄治疗的几点思考)
  • 2024-06-02关于早泄治疗的几点思考近期本人发了一些关于早泄的文章,发现很多读者的反馈评论里,对早泄的治疗并没有太大信心,很多朋友都持悲观的态度出于对大家的理解,本人对早泄的诊断和治疗重新进行了梳理,又仔细研阅了中医和西医对于早泄的最新。