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

  • 色盲测试图能坚持看到第9张算厉害(你也快来测一测吧)
  • 2024-11-22你也快来测一测吧你不幸被测试为色盲或色弱的话,希望你不要悲伤,遗传决定的,通过下面的可以进一步确定为何种色弱辨色能力判别色盲色弱测试,你也快来测一测吧!上图中的A读不出为红色色盲上图中的C读不出来是绿色色盲上图,红绿。
  • 一梦江湖端午节的活动好吗(端午节活动挂件)
  • 2024-11-22端午节活动挂件相信不少小伙伴都度过了一个圆满的端午节,美美吃到可口的粽子不说,还在端午假期,尽情体验了一把一梦江湖(原楚留香手游)开启的端午节活动~闲暇之余能在江湖中感受浓郁逗趣的端午氛围,小日子也是非常充实了~而。
  • 从庖丁解牛看庄子的人生道理(庄子道物关系的一种诠释进路)
  • 2024-11-22庄子道物关系的一种诠释进路摘要:“物物而不物于物”是庄子思想的一个重要命题通过对“物”之本义的考察,“物”指向一个差别、对待的生存世界,人作为生活于其中的一个“物”,难逃被“物”分解整体完备之性的命运因此,庄子针对万物本性常然。
  • 黄子韬小时候被欺负的经历(热血少年黄子韬成功越狱)
  • 2024-11-22热血少年黄子韬成功越狱由爱奇艺、龙韬娱乐、灵河文化出品,黄子韬、张雪迎领衔主演,刘宇宁、曹曦月、朱杰、孙振宸主演,王劲松、张帆特别出演的近代热血青春剧《热血少年》正在爱奇艺热播中本周机智鬼马的吴乾(黄子韬饰)几经周折终于成。
  • 孙艺珍以为玄彬不辞而别崩溃大哭(孙艺珍夫妇温馨度蜜月)
  • 2024-11-22孙艺珍夫妇温馨度蜜月爱是亘古长明的灯塔,它定睛望着风暴却兀不为动,爱就是充实了的神生命,正如盛满了酒的酒杯每个人总有不期而遇的爱情,不要着急,最好的总会在最不经意的时候出现多少人羡慕韩国顶流CP孙艺珍和玄彬的爱情,因为演。
  • 网上刷单被骗了1万(轻信网上兼职刷单)
  • 2024-11-22轻信网上兼职刷单扬子晚报网11月16日讯(通讯员江公宣记者梅建明)近日,家住南京江宁的甘女士,添加了一位网络好友对方称可以带甘女士兼职“刷单”,稳赚不赔甘女士听后大为所动,表示想试一试,结果就试出问题来了据介绍,对方。
  • 鬼泣但丁恶魔形态(鬼泣系列之但丁篇)
  • 2024-11-22鬼泣系列之但丁篇恶魔从不哭泣这些眼泪……是上天赐予人类的礼物——但丁《鬼泣》鬼泣5已经是卡普空的第6部作品了2001年,鬼泣初代于PS2平台发售,也是该系列至今无法逾越的巅峰初代鬼泣带给了玩家们一种前所未有的体验——。
  • 李白写的三峡(散文聂作平三峡楼台)
  • 2024-11-22散文聂作平三峡楼台三峡楼台,杜甫的夔州岁月文丨聂作平1我在草堂镇下了沪蓉高速,顺着一条泥泞土路沿江而行路在半山腰,与路相伴的是三三两两的农舍,比路更高的是果园和林地,比路更低的是混浊的长江行驶十多公里后,峰回路转,我终。
  • 香蕉如何种子繁育(香蕉里面为什么没有种子)
  • 2024-11-22香蕉里面为什么没有种子香蕉是一种美味的水果,受到很多人的喜欢而且香蕉最出众的特点就是剥开皮直接吃掉,不像苹果有个内核,也不像石榴、西瓜吐好多籽香蕉根本就没籽,吃起来很方便但是没籽的香蕉是怎么繁殖的呢?香蕉的起源和发展有着悠。
  • 哪个品牌喷墨打印机耗材便宜(打印机复印机耗材有哪些)
  • 2024-11-22打印机复印机耗材有哪些打印办公设备以及耗材对于一个公司而言是不可缺少的硬件,当然买这个东西也有很大的学问,买太好的有很多功能会用不上造成资源的浪费,价格也贵但是耗材方面也不能一味的贪图便宜,否则会影响打印质量,甚至损伤机器。
  • 腾讯动漫哪个活动有兑换码(腾讯动漫四周年感恩庆典)
  • 2024-11-22腾讯动漫四周年感恩庆典腾讯动漫作为中国最大的互联网动漫平台,自2012年3月21日成立至今,已经伴随着广大的动漫爱好者们走过了四年的美好时光!腾讯动漫不仅拥有数量庞大的漫画作品、大量的优质作者资源,还取得了多部全版权作品点。
  • 清明节适合去哪里旅游西安(这才是西安春天正确的打开方式)
  • 2024-11-22这才是西安春天正确的打开方式  西安网讯(记者马莹实习记者梁天鹏)春暖花开,又到了出门踏青的时节最近几天是不是看遍了朋友圈的各种花海大片,有没有想要出去拥抱春天的冲动,那一起去西安这些地方看看吧  云赏春光来莲湖赴一场“春天的约。