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

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

  • 读论语以德服人(论语共读德不孤)
  • 2024-07-01论语共读德不孤【共读内容】4.25子曰:「德不孤,必有鄰」【导读学者】任大援:北京外国语大学教授韩星:中國人民大學國學院教授【共读笔记】柳慧:【論語晨讀】第730天孔曆二千五百六十七年夏曆丙申年十一月二十2016年。
  • 邦太拖把海绵头如何更换
  • 2024-07-01邦太拖把海绵头如何更换首先找到海绵头的螺丝紧固的部位,利用螺丝刀将螺丝旋下来,要是不好旋可以抹点油就可以了把四个螺丝旋下后,海绵头就卸下来了更换的海绵头都配备了新的螺丝,将杆子与海绵头的螺丝孔对齐,按顺序将螺丝旋起并固定,。
  • 小程序组队猜歌游戏(做游戏猜题点歌置顶)
  • 2024-07-01做游戏猜题点歌置顶这一期没有特意搭建的舞台,谭校长、林志炫、白举纲、戴佩妮、郁可唯等,做游戏,猜题,点歌置顶,分享故事,唱歌,时而不时的互动,这才是我们一些人最初想看到的KTV样子嘛!至真,至纯,至暖的感觉!虽然现在各。
  • 千层套路啥意思(揭露了这些千层套路)
  • 2024-07-01揭露了这些千层套路“一道进、二道出、三道进、四道出、五道进、六道杀……”这是什么神秘的暗号吗?不,这是电信网络诈骗犯罪分子实施刷单诈骗的套路和逻辑!近日,浙江嘉兴警方抓获一名嫌疑人何某,他就是这个套路的讲述者,而他的身。
  • 林蛙补肾(冬季滋阴补阳哇哇蛙)
  • 2024-07-01冬季滋阴补阳哇哇蛙说到滋阴补阳,很多人可能都会选择栗子、枸杞、甲鱼等等,食补固然好,但是每年都吃这几样,吃着吃着也就腻了,尤其很多人表示甲鱼的味道其实很一般,所以今天小编就给大家推荐点冷门的食补食材,不仅有营养,而且做。
  • 本科大学为什么有专科(本科为什么被称作)
  • 2024-07-01本科为什么被称作“本科”一词从历史上来说《宋史·选举志一》:“开宝三年(970年),诏礼部阅贡士及十五举尝终场者,得一百六人,赐本科出身”这可能是本科一词的最早来源清末高等教育传人中国时,在本科之前有一个预科,本就是。
  • 高铁不能带什么液体(高铁不能带哪些液体)
  • 2024-07-01高铁不能带哪些液体除了易燃、易爆、自燃、危险、有毒、强腐蚀性、国家禁运的液体危险品不能带上高铁,其他液体可以带在保证安全和卫生的条件下限量携带下列物品不超过20毫升的指甲油、去光剂、染发剂、不超过100毫升的酒精、冷烫。
  • 弘扬善文化传播正能量(从文化薪火传承中汲取向上向善力量)
  • 2024-07-01从文化薪火传承中汲取向上向善力量作者:张伟(山东省新时代中国特色社会主义思想研究中心特约研究员,山东社会科学院文化所所长、研究员)中华优秀传统文化是融合了儒、释、道等多种不同文化形态在内,由中国各民族共同创造和共同发展的文化与西方文。
  • 破事精英第5集最后三个成就(破事精英第五集)
  • 2024-07-01破事精英第五集《破事精英》在爱奇艺更新到第五集了第五集经典再现,和《爱情公寓第五季》13集一样,由观众自由选择剧情走向,然后出现多个结局之前我的文章,写《破事精英》第一集,很大一部分在炒《爱情公寓》的冷饭但是看到第。
  • 僵尸类手游哪款最好玩(好玩的打僵尸系列手游推荐)
  • 2024-07-01好玩的打僵尸系列手游推荐从《植物大战僵尸》这款经典打僵尸游戏开始,到现在也推了不少品质不错的打僵尸游戏,九妹为友友们整理了十款还不错的末日题材打僵尸手游在末日世界,你会做什么呢?NO.1《活下去》推荐理由:对恐怖一无所知的你。