dotnet core controller 参数(dotnet控制台使用)
dotnet core controller 参数(dotnet控制台使用)
2024-09-27 05:02:40  作者:了解他的人  网址: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

  • 颜氏家训全部名句(颜氏家训10则名经典名句)
  • 2024-09-27颜氏家训10则名经典名句《颜氏家训》10则名经典名句,通达世事,经营人生​《颜氏家训》是南北朝时期颜之推的经典著作,是一部系统完整的家庭教育教科书,在传统中国的家庭教育史上影响巨大,享有“古今家训,以此为祖”的美誉一、教妇初。
  • 校园里的樱花盛开了(校园里的樱花笔记)
  • 2024-09-27校园里的樱花笔记爱上这里,这里的一花一草都会对你热情校园里的樱花树早披上自己最得意的衣裳,静静地伫立在风中,她在等待着人们回来春闹枝头,樱花开得好热烈愿眉山药科院年年春天繁花似锦,愿樱花永远记得我们青春的容貌和不曾懈。
  • 成语沆瀣一气的意思(有个很常用的成语叫)
  • 2024-09-27有个很常用的成语叫沆瀣一气是个很常用的贬义成语,意思是说那些臭气相投的人勾搭在一起,和一丘之貉、狼狈为奸相近但这个成语也有点特殊,因为一个四字成语里竟然有两个生僻字如果要问沆瀣是什么意思,可能知道的人真不多“沆瀣”两个。
  • 熊出没光头强吃最好的东西(盘点光头强吃过的五种食物)
  • 2024-09-27盘点光头强吃过的五种食物《熊出没》是一部经典的国产动画,可以说这已经是家喻户晓了里边的经典人物还是要数光头强和熊大熊二了,整部片子讲述的也是两者之间的互斗互勇随着剧情的发展,越来越多的人开始猜测光头强的身价他到底是穷掉渣的穷。
  • 小白怎样寻找服装进货渠道(湖南服装开店进货攻略流程)
  • 2024-09-27湖南服装开店进货攻略流程本小编先要说一下,长沙也有批发市场,可以是小编我喜欢写株洲:株洲在我心目中分量比较重附带一下:全部集中在火车站旁边:每一个市场的功能金帝广场(人民路左侧):主营品牌男女装批发零售;金都(人民路右侧):。
  • 夜店ktv教程(直男KTV攻略)
  • 2024-09-27直男KTV攻略———————————————————陆陆续续放假了,各种大聚小聚也来了,除了吃饭喝茶,唱K估计依然是大家的首选,尤其人数比较多的聚会又是一年的KTV大会,对于麦霸来讲当然是无所谓,可是对于自认为五音。
  • 唱吧全民k歌盈利模式(想唱就唱全民K歌)
  • 2024-09-27想唱就唱全民K歌“新零售”尝试正在不断向线下尝试,继无人超市等的全新体验纷纷落地后,日前据南方全媒体记者了解到,全民K歌的自助店也登录广州,广州市民可以随时体验一把专业K房的体验据了解,全民K歌自助店位于广州市天河区。
  • 文明校园创建示范学校(春风化雨育英才)
  • 2024-09-27春风化雨育英才龙城高级中学(简称“龙高”)位于龙岗中心城清林径森林公园南麓,青山环绕,景色宜人,是一所充满教育理想而又能遵循教育规律的学校多年来,该校将文明校园创建工作融入学校制度、教育教学、师德师风、学风校风、环。
  • 资生堂丝蓓绮白椿修复洗发露(染发后如何拯救你的稻草头发)
  • 2024-09-27染发后如何拯救你的稻草头发是不是很多宝宝和小编一样的情况:每次洗头发时不是因为时间太紧迫,就是自己太累了,懒得去抹护发素护理头发尤其是头发烫染之后,几天不去焗油护理,就会顶着一头草菇头:干燥,暗淡,无光泽偶尔花很多钱去整头发,。
  • 游戏情侣cp名字内涵
  • 2024-09-27游戏情侣cp名字内涵1.[蝴蝶少女ぴ】[狼族少年ぴ】2.[Sunshine°】[Rainbow°】3.[以前你总说爱我i】[现在却说不适合i】4.[待我如初见】[葬我以时光】。
  • 怎么改善手脚冰凉的症状(经常手脚冰凉要做好这5件事)
  • 2024-09-27经常手脚冰凉要做好这5件事在日常生活当中,有很多人经常会出现手脚发凉现象尤其是在进入秋季以后,对于一些气血不足、血流不畅、体寒的人群来说,这种现象会非常明显这类人群大多数还会伴有一些头晕、乏力、心慌等一系列不适,对生活和健康有。