You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何去除.NET MAUI DrawingView生成图片的灰色背景?

解决.NET MAUI DrawingView生成图片背景灰色问题

问题核心:DrawingView的GetImageStream方法仅捕获绘制的线条内容,不会包含控件的BackgroundColor(这是布局层的背景,不属于绘图内容),所以生成的图片默认背景是透明的,在某些场景下会显示为灰色(比如容器背景是灰色,或图片查看器用灰色填充透明区域)。

直接修改获取图片的逻辑,手动绘制白色背景即可解决,推荐用SkiaSharp实现跨平台的绘图逻辑:

步骤1:安装SkiaSharp依赖

在项目的NuGet包管理器中安装SkiaSharp.Views.Maui包,用于跨平台绘图。

步骤2:替换图片生成代码

将OnLineCompletedCommand中的平台特定代码替换为以下跨平台逻辑:

using SkiaSharp;
using SkiaSharp.Views.Maui;

private async void OnLineCompletedCommand(IDrawingLine line)
{
    SignatureLines.Add(line);

    // 定义图片尺寸
    int width = 500;
    int height = 500;

    // 创建SkiaSharp画布
    var imageInfo = new SKImageInfo(width, height);
    using var surface = SKSurface.Create(imageInfo);
    var canvas = surface.Canvas;

    // 绘制白色背景
    canvas.Clear(SKColors.White);

    // 绘制签名线条
    using var paint = new SKPaint
    {
        Color = SKColors.Black,
        StrokeWidth = 2,
        IsAntialias = true,
        StrokeCap = SKStrokeCap.Round, // 保持线条圆润,和DrawingView一致
        StrokeJoin = SKStrokeJoin.Round
    };

    foreach (var drawLine in SignatureLines)
    {
        var skPoints = drawLine.Points.Select(p => new SKPoint((float)p.X, (float)p.Y)).ToArray();
        canvas.DrawPoints(SKPointMode.Polygon, skPoints, paint);
    }

    // 将画布转为流并保存
    using var image = surface.Snapshot();
    using var stream = new MemoryStream();
    image.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
    stream.Position = 0;

    SignatureBytes = stream.ToArray();
    SignatureImage = new Image
    {
        Source = ImageSource.FromStream(() => new MemoryStream(SignatureBytes))
    };
}

关键说明

  • 手动调用canvas.Clear(SKColors.White)绘制白色背景,确保生成的图片自带白色底色,不会出现透明/灰色背景。
  • 使用SkiaSharp的绘图逻辑和DrawingView的线条属性保持一致(比如StrokeCap、StrokeWidth),保证签名样式和绘制时一致。
  • 跨平台通用,无需再写Android/iOS的平台特定代码。

额外检查

如果之前IOS代码中存在stream.Position未重置的问题,新代码已经通过stream.Position = 0解决,避免图片加载失败。

内容的提问来源于stack exchange,提问作者mbai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:05:10