dotnet core controller 参数(dotnet控制台使用)
dotnet core controller 参数(dotnet控制台使用)
2024-11-08 01:05:22  作者:了解他的人  网址: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 的设计上,渲染的一个模块是可以拆处理独立使用的


本文将从一个控制台开始,从比较基础的层面告诉大家如何使用 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-08让我们再次检验邓超【高能E蓓子】系今日头条签约作者,此文为高能E蓓子原创,禁止任何形式的转载,转载请后台联系,但欢迎你们转发到朋友圈《心理罪之城市之光》一定是这周最受吃瓜群众期待的电影之一据说它映前进行的千场点映中,因。
  • 工业除湿机好不好(工业除湿机型号那么多该如何选择)
  • 2024-11-08工业除湿机型号那么多该如何选择除湿机的分类有很多,按用途分可分工业除湿机、家用除湿机,工业除湿机为大除湿量除湿机,用于工厂、仓库、博物馆、图书馆等大面积环境场所;家用除湿机为小除适量除湿机,用于家庭使用除湿机的工作原理分冷却式除湿。
  • 鸿星尔克报表在哪看(鸿星尔克是怎么掉队的)
  • 2024-11-08鸿星尔克是怎么掉队的图片来源@视觉中国文丨好看商业,作者丨周一围,编辑丨安心河南的一场大暴雨,把福建的鸿星尔克带火了事情的原委大家都知道了:深处困境的鸿星尔克,默默向河南灾区慷慨捐赠了5000万热心网友被这一善举感动,纷。
  • 济宁生态环境保护(济宁市水环境保护条例)
  • 2024-11-08济宁市水环境保护条例为了增强立法的公开性和透明度,提高立法质量,近日,由济宁市生态环境局报请市政府审议的《济宁市水环境保护条例(草案征求意见稿)》征求社会各界意见有关单位和各界人士可以在2020年6月30日之前,通过以下。
  • 精品咖啡豆介绍(卡契芬COACHEF)
  • 2024-11-08卡契芬COACHEF台湾实在有够多人钟爱咖啡,大大小小的咖啡品牌不知几何,醉心其中的重症者也不在少数,他们苦心钻研,追求咖啡的最高境界,以达到对咖啡自我认知的高峰,例如卡契芬这个以两位世界著名音乐大师为名的团队每个人对生。
  • 一斤水加一斤盐体积会变吗(如果把一斤盐放进一斤水)
  • 2024-11-08如果把一斤盐放进一斤水如果把一斤盐放到一斤水当中,最后的结果就一定是两斤吗?根据质量守恒定律,照理说,一斤水溶一斤盐的情况,就应该是2斤,因为物质是不灭的,整个过程的质量就应该守恒的如果我们从微观的角度来看,整个过程中,构。
  • 下饭神器番茄炒蛋(下饭神器辣椒炒蛋)
  • 2024-11-08下饭神器辣椒炒蛋又香又辣的菜,非辣椒炒蛋莫属了,简单又好做,在这种炎热的天气,我也能吃两碗饭,就两个字“过瘾”吃不了辣的宝子,可以买不太辣的辣椒做,做法都一样的首先我们需要准备好需要的材料食材:青辣椒和鸡蛋辅料:蒜小。
  • 学英语为什么要自学(为什么一定要学一门外语)
  • 2024-11-08为什么一定要学一门外语多学一门外语就是多开一扇窗不仅能为我们的生活和工作增添许多乐趣,还能帮我们树立信心,有助于自己事业的成功大家都谈论过的内容,或者那些大家都知的大道理,小V我就不多说了小V从一个普通的人角度出发来分析一。
  • 安徽省重要水陆交通枢纽(安徽新规划一客运中心)
  • 2024-11-08安徽新规划一客运中心随着城市人口的不断增加,城市客运基础设施还不够完善,很难满足百姓的出行方便客运作为城市内部一项交通使用最频繁的基础设施,承担着非常大的客运压力,所以各个城市都在积极升级民生工程的基础设施今天我们走进安。