dotnet core controller 参数(dotnet控制台使用)
dotnet core controller 参数(dotnet控制台使用)
2024-11-24 09:55:34  作者:了解他的人  网址:https://m.xinb2b.cn/sport/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-24喂养茶杯犬的注意事项茶杯犬起源于美国,发展于日韩,如今已得到进一步的改良在19世纪时,玩具贵宾犬因基因突变而诞生了最早的茶杯犬,经美国繁殖家的培育,逐渐发展成现今的模样茶杯犬小巧可爱,成为了一众贵宾爱好者的新宠由于茶杯犬。
  • 英超黑马狼队比赛(U球直播英超高清在线)
  • 2024-11-24U球直播英超高清在线狼队将于周三(11月9日)晚上在莫利纽主场迎战利兹联,参加联赛杯东道主本赛季一直在挣扎,促使经理布鲁诺·拉格被解雇狼队上周末在英超联赛中以3-2输给了布莱顿和霍夫阿尔比恩他们现在希望在联赛杯中取得更好。
  • 西安最好的东大街:老西安人眼中东大街的沉浮
  • 2024-11-24西安最好的东大街:老西安人眼中东大街的沉浮东大街在20年前绝对是西安最具人气最繁华的街道,当时的东大街名店林立百年老店集钟表,鞋帽,服装,餐饮,百货,糖果糕点,工艺纪念品,几乎涵盖百姓生活的方方面面,当时真是人头攒动百业兴旺,00年后政府改造。
  • 献组词(关于献组词)
  • 2024-11-24关于献组词献组词:奉献、文献、献身、捐献、献媚、献花、呈献、献礼、献策、进献、献丑、敬献、献宝、芹献、献艺、献技、献疑、献旗、献映、计献、献血、献祭、献陵、献上、供献、献替、礼献、献鸠献(拼音:xiàn)是汉语。
  • 许渊冲百年自述 百岁翻译界泰斗许渊冲逝世
  • 2024-11-24许渊冲百年自述 百岁翻译界泰斗许渊冲逝世6月17日,南都记者从北京大学党委宣传部证实,著名翻译家、北京大学新闻与传播学院教授许渊冲,当日上午在京逝世,享年100岁1921年出生的许渊冲,在1938年,刚满17岁的时候就以第7名的成绩考入西南。
  • 开封八大碗特色菜(开封第一家四味烩菜店)
  • 2024-11-24开封第一家四味烩菜店清晨伊始,忙碌的一天悄然开始,人潮中,早餐唤醒一整天的活力早餐在国人的心目中,占据极其重要的位置,在武汉有过早的习俗,在广东有喝早茶的风俗,在开封早餐吃一碗四味烩菜,绝对是精神抖擞一整天每一个城市都会。
  • 沙发海绵变硬的妙招(沙发海绵变硬怎么办)
  • 2024-11-24沙发海绵变硬怎么办沙发海绵变硬的妙招有三个:一个是用肥皂水浸泡海绵,然后将其晒干就可恢复弹性一个是人工拍打海绵就能让海绵恢复硬度,只不过这方法适合沙发轻微变软的情况一个是在沙发底部放一些填充物进去让沙发保持硬度,不过这。
  • 韩版创造101出道现场(已演过多部网剧)
  • 2024-11-24已演过多部网剧《创造101》结束4年了,除了一些结婚、转行的,还留在圈内的,大部分都进入了演艺圈发展,王莫涵也不例外最近热播的悬疑网剧《法医秦明之读心者》中就有她,她演了一位受害者张雨晨,作为空姐,她在飞机上结识了。
  • cat怎么读(cat的基本解释及变化形式)
  • 2024-11-24cat的基本解释及变化形式cat英音[kæt],美音[kæt]cat基本解释:n.猫;猫科动物;狠毒的女人;爵士乐爱好者;vt.把(锚)吊放在锚架上;〈俚〉寻欢,宿娼变化形式:复数cats,第三人称单数cats,过去式catt。
  • 干煸花菜正确做法(花菜的做法多样)
  • 2024-11-24花菜的做法多样花菜是争议比较大的蔬菜,比较考验厨艺,要是厨艺一般,很难做出来美味,要是烹饪方法到位,那端上桌绝对是C位其实食材无好坏之分,还需要能赏识它的伯乐,选择最适合它的,才能造就最可口的美食花菜也叫做菜花,原。
  • 成语精读打卡210天,老潘的每日成语分享
  • 2024-11-24成语精读打卡210天,老潘的每日成语分享老潘的每日成语分享Day23成语:唯命是从拼音:wéimìngshìcóng含义:意思是命令就服从,不敢有半点违抗出处:《左传·昭公十二年》:“今周与四国服事君王,将唯命是从,岂其爱鼎”近义词:马首是。