dotnet core controller 参数(dotnet控制台使用)
dotnet core controller 参数(dotnet控制台使用)
2024-06-02 01:03:56  作者:了解他的人  网址:https://m.xinb2b.cn/life/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-06-02我梦见自己死在浴室我做梦了,我梦见自己在浴室里滑了一跤摔的我当即昏死过去了那个梦感觉还挺真实的就好像是真实存在发生过一样我现在正躺在床上,直勾勾的盯着天花板,还在想着梦里的事梦里的浴室里也没有水,我是怎么滑倒的呢?唉,。
  • 君麻吕忍者村(波洞家的两个板娘我很期待)
  • 2024-06-02波洞家的两个板娘我很期待波洞星球这款APP推出算来也有些时间了,不知道诸位喜欢动漫的读者老爷体验过了么?之前官方搞活动,充值有优惠,于是我就在上面重新把《一人之下》看了一遍,体验还是蛮不错的,看官方的动作,对这一块的投入也蛮。
  • 炉石传说砰砰计划全部关卡(砰砰计划谜题实验室攻略)
  • 2024-06-02砰砰计划谜题实验室攻略斩杀篇攻略镜像篇攻略清场篇攻略爆破专家布林娜1.先圣光,再禁忌治疗2.先联结治疗奶自己随从,再对自己随从使用神圣惩击,然后和对面交换,最后快速治疗加技能奶脸3.两张圣光术奶自己,真银圣剑加光明圣印解腐。
  • 日本油管高达玩家(3个月收获27万粉丝)
  • 2024-06-023个月收获27万粉丝二次元宅最喜欢什么?新番不假,手办也能够位列前排,但如果你能够爷们一点儿,那就一定离不开另外两样东西:高达胶玩和小姐姐!后两者看似没有什么关联,甚至存在一定意义上的互斥(胶玩圈也有胶佬集聚地的外号),。
  • 重工业版李子柒的号(重工李子柒林果儿)
  • 2024-06-02重工李子柒林果儿建房子、修鱼塘、搞电焊,自制水利发电机,木工、瓦工、水电工,样样都能干!她就是“工科女神”女神林果儿,一个全网男性都想娶回家的“机械西施”一个早已停产、年久失修的柴油机,到了林果儿手中之后,立马变得焕。
  • 成年人恋爱相处舒服的方式(成年人的快餐式恋爱观)
  • 2024-06-02成年人的快餐式恋爱观网上有个热搜:为什么年轻人越来越不愿意谈恋爱了?经常能看到类似的话题上热搜为什么不敢恋爱?为什么不愿意恋爱?为什么越来越不想结婚了?归根结底,现在的年轻人对待感情的态度愈发理智了他们不会轻易开始一段感。
  • 怎样瘦小腿肌肉型(需要怎么瘦腿)
  • 2024-06-02需要怎么瘦腿拍打放松小腿肌肉,拍打或者是按摩可以让结实紧绷的小腿肌肉得到放松,拍打的方式也很简单,在空闲时间双手握拳轻轻拍打小腿肌肉或者用手从脚踝向膝盖的方向捏小腿肌肉,长期坚持可以放松小腿肌肉同时促进腿部的血液。
  • 温州伴娘婚礼全过程(温州大尺度婚礼曝光)
  • 2024-06-02温州大尺度婚礼曝光近日,一温州大尺度婚礼视频曝光,其视频尺度之大引发网友争议对于温州大尺度婚礼视频,网友给出了不同的意见,有网友认为这个方式很新颖,但是大多数网友还是表示尺度太大不能接受温州大尺度婚礼视频曝光新娘内衣出。
  • 身材超棒的韩国女星拍的片(不穿内衣上阵还加码背部全裸)
  • 2024-06-02不穿内衣上阵还加码背部全裸相较欧美国家,亚洲国家较为保守,许多偶像艺人即使在活动中也尽量维持「点到为止」的服装造型现以演员身份活动的前AfterSchool成员UIE是第二代女团中,有着「蜜大腿」封号的性感女偶像,在退出团体后。
  • 大数据杀熟怎么处罚(大数据杀熟行为10月1日起明令禁止)
  • 2024-06-02大数据杀熟行为10月1日起明令禁止经常使用某个APP却发现自己预订酒店机票的价格比“新手”贵、给商家的差评无法显示……今年10月1日起,这些在线旅游存在的问题都将得到规范国家文旅部最新发布的《在线旅游经营服务管理暂行规定》,对上述现象。
  • 天门市茶圣(茶圣故里湖北天门)
  • 2024-06-02茶圣故里湖北天门【环球网文旅特约作者:米广弘】茶圣陆羽,世界茶界,无人不晓,茶圣故里,湖北天门这位唐代茶学家,一生潜心茶事,矢志不移,其所著《茶经》,是中国乃至世界现存最早、最完整、最全面介绍茶的一部专著,被国内外茶。