C# MAUI怎么画图 SkiaSharp集成MAUI教程

来源:这里教程网 时间:2026-02-21 17:36:06 作者:

在 .NET MAUI 中画图,最成熟、跨平台且性能好的方案是集成 SkiaSharp。它不是 MAUI 内置的绘图 API,但官方推荐、社区广泛使用,支持 Canvas 绘制、图像处理、文字渲染等,而且能直接操作像素、支持硬件加速。

安装 SkiaSharp.Maui 包

MAUI 项目需引用专为 MAUI 适配的 SkiaSharp 包(不是旧版 SkiaSharp.Views.*):

在项目文件(.csproj)中添加以下 PackageReference:

(建议用最新稳定版,查看 NuGet 页面 获取版本号)

安装后,还需在

MauiProgram.cs
中注册 SkiaSharp 服务:

builder.UseSkiaSharp();

在 XAML 中使用 SKCanvasView

添加一个可绘制的画布控件,比如在页面中写:

注意要先声明命名空间:

xmlns:skia="http://schemas.microsoft.com/dotnet/2021/maui/skiasharp"

然后在后台代码(如

Page.xaml.cs
)中实现绘制逻辑:

private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
  var canvas = e.Surface.Canvas;
  canvas.Clear(SKColors.White);

  var paint = new SKPaint { Color = SKColors.Blue, StrokeWidth = 4f, Style = SKPaintStyle.Stroke };
  canvas.DrawCircle(100, 100, 50, paint);
}

响应触摸或手势画线(简易手绘)

想实现“手指画线”,需监听

Touch
Pointer
事件(推荐 Pointer,更统一):

在 XAML 中给
SKCanvasView
添加:
PointerPressed="OnPointerPressed" PointerMoved="OnPointerMoved" PointerReleased="OnPointerReleased"
维护一个
SKPath
记录当前笔迹
每次移动时追加点,触发
InvalidateSurface()
重绘
PaintSurface
中绘制该路径

注意:路径数据存在内存中,不自动持久化;若需保存,可用

SKImage.Snapshot().Encode()
导出 PNG。

常见问题提醒

不能在 PaintSurface 里创建新 SKPaint 实例太多次——建议复用或用 using 管理生命周期,避免 GC 压力 Canvas 坐标是设备无关像素(DIP),但 Skia 的坐标系默认是物理像素,需通过
e.Info.Width / Width
换算缩放比(尤其在高 DPI 设备上)
Android 需确保
AndroidManifest.xml
中有
android:hardwareAccelerated="true"
(MAUI 默认已开)
调试时可先用
SKBitmap
在内存中绘图再转成
SKImage
,方便单元测试

基本上就这些。SkiaSharp + MAUI 的组合足够应对图表、签名板、自定义控件、游戏简单渲染等场景,不复杂但容易忽略初始化和资源管理细节。

相关推荐