本篇文章给大家谈谈dotnet 控制台使用Microsoft.Maui.Graphics 和Skia 进行绘图入门,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。
像往常一样,安装Microsoft.Maui.Graphics.Skia 的NuGet 包。为了在Ubuntu on Windows Subsystem for Linux (WSL) Windows Subsystem for Linux 上运行,请继续添加SkiaSharp.NativeAssets.Linux.NoDependency 库。具体请参见dotnet修复在Linux上使用SkiaSharp时找不到liblibSkiaSharp库的问题。
添加完成的库的csproj工程文件内容如下
项目Sdk=’Microsoft.NET.Sdk’ PropertyGroup OutputTypeExe/OutputType TargetFrameworknet6.0/TargetFramework ImplicitUsingsenable/ImplicitUsings Nullableenable/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(蓝色)G(绿色)R(红色)和A(Alpha透明度)的32位格式,每个分量8位代表一个像素,足够简单。受到许多平台、框架和硬件的支持。虽然Bgra8888不是最高效的方法,但它简单易懂,并且可以轻松在多个平台上共享。因此,当您不确定选择什么颜色时,最好默认使用这种格式。
通过SKImage.Create方法创建图片。这张图不仅仅是磁盘上的图片,而是Skia的一个概念。
使用var skImage=SKImage.Create(skImageInfo);为了在这个SKImage上绘图,你需要取出SKBitmap对象并将其放入SKCanvas中。代码如下
using (SKBitmap skBitmap=SKBitmap.FromImage(skImage)){ using (var skCanvas=new SKCanvas(skBitmap)) { }}则获得了SKCanvas的对象,可以放入SkiaCanvas中
使用(SKBitmap skBitmap=SKBitmap.FromImage(skImage)){ 使用(var skCanvas=new SKCanvas(skBitmap)) { var skiaCanvas=new SkiaCanvas(); } skiaCanvas.Canvas=skCanvas; }}这样就可以得到ICanvas对象了,这一层是抽象的。无论具体底层绘图使用什么基础,业务上都使用ICanvas类型。
var SkiaCanvas=new SkiaCanvas(); skiaCanvas.Canvas=skCanvas; ICanvas 画布=skiaCanvas;以上就完成了将Microsoft.Maui.Graphics的具体绘图底层逻辑替换为Skia进行绘图。类似的可以用WPF绘图来代替。详细请参见WPF使用MAUI的自绘制逻辑。
下一步是尝试绘制一条线段来测试它。
画布.StrokeSize=2; canvas.StrokeColor=Colors.Blue;画布.DrawLine(10, 10, 100, 10);将绘制的内容保存到图像文件中,需要回到SkiaSharp的逻辑
var 文件名=#34;xx.png’; skCanvas.Flush();使用(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
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/114443.html
用户评论
发呆
终于有人写了关于使用 .NET 控制台和 Microsoft.Maui.Graphics 的文章!我一直想要尝试一下 Skia 在 .NET 环境中的使用,这个入门教程看起来非常不错。
有17位网友表示赞同!
花海
控制台项目也可以做图像渲染? 没想到还有这么个用法,看来我需要学习看看了!Skia 做图的效果怎么样呢,和 WPF 一比区别大吗?
有5位网友表示赞同!
ー半忧伤
感觉作者把 Skia 和 Maui.Graphics 的结合解释得很清晰,对于新手来说简直就是福音!我现在就想去试验一下用 Skia 在控制台中画个简单的图形。
有18位网友表示赞同!
可儿
Skia 在移动平台上用的很广泛,没想到可以移植到 .NET 平台上绘制图像,这真是一个很棒的组合。现在控制台项目也可以做出更丰富多彩的界面了?
有11位网友表示赞同!
哽咽
这个教程讲得太基础了!我想要了解一些更高级的使用技巧,例如如何使用 Skia 的渲染管道来实现复杂的动画效果或自定义绘图样式等等。
有8位网友表示赞同!
愁杀
Skia 在性能方面怎么样?和 WPF 相比流畅度有没有差距?
有18位网友表示赞同!
命里缺他
感觉这个教程的代码注释有点少,如果能加一些解释和说明会更好理解。我一直在寻找学习 Skia 的优质资源,这篇文章算是找到了!
有19位网友表示赞同!
惯例
文章中只介绍了简单的图形绘制,对于像图片读取、处理、生成等更复杂的功能操作有没有详细的教程?
有19位网友表示赞同!
君临臣
希望作者以后能继续更新这个系列文章,教我们如何使用 Skia 在控制台中构建更复杂的图形界面!
有9位网友表示赞同!
凉城°
Skia 做出的图像渲染效果真的挺赞的,细腻度很高。我感觉很有潜力可以用它来制作一些优秀的桌面程序!
有15位网友表示赞同!
夏日倾情
这篇文章虽然入门友好,但对于 .NET 的基础知识要求还是比较高的,如果想跟着教程一步一步做实验的话需要先掌握一定的 .NET 基础。
有16位网友表示赞同!
炙年
控制台确实不是绘图界面设计的最佳工具,但有了 Skia 和 Maui.Graphics 的支持,我想应该可以尝试一些更便捷的图形操作方式吧!
有6位网友表示赞同!
情深至命
我觉得这个教程虽然入门友好,但是对于想要深入学习 Skia 的读者来说内容可能有些浅显。希望作者能够提供更深入的案例和讲解。
有17位网友表示赞同!
从此我爱的人都像你
很高兴看到有人在 .NET 平台上探索 Skia 的应用!我觉得这将会是一个非常有意义的发展方向!
有16位网友表示赞同!
为爱放弃
如果能将代码整合到一个可以下载的项目中,方便大家直接运行和调试,那岂不更加好了!
有13位网友表示赞同!
淡淡の清香
我希望以后能够看到更多使用 Microsoft.Maui.Graphics 和 Skia 在 .NET 控制台中进行绘图的应用案例分享,学习大家的经验做法!
有15位网友表示赞同!
晨与橙与城
这个教程介绍的仅仅是图形绘制的基础知识,Skia 的功能还有很多其他方面,例如文本渲染、路径构建等等,希望作者在后续的博客文章中能够详细讲解这些内容。
有8位网友表示赞同!