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

MAUI.NET中如何获取跨平台Bitmap对象用于图像处理?

在MAUI.NET中跨平台处理图像并兼容.NET 6图像处理项目

问题核心

MAUI.NET中无法直接使用System.Drawing.Common的Bitmap类,平台专用的Bitmap(如Android.Graphics.Bitmap)又无法跨平台适配.NET 6图像处理项目。SkiaSharp是解决该问题的最优跨平台方案,它提供统一的图像操作API,支持所有MAUI目标平台,同时能无缝兼容.NET 6项目。

解决方案步骤

1. 安装SkiaSharp依赖

在MAUI项目和.NET 6图像处理项目中,分别安装对应NuGet包:

  • MAUI项目:SkiaSharp + SkiaSharp.NativeAssets.Maui(提供MAUI平台原生支持)
  • .NET 6项目:SkiaSharp

可通过NuGet包管理器安装,或使用CLI命令:

# MAUI项目
dotnet add package SkiaSharp.NativeAssets.Maui
dotnet add package SkiaSharp

# .NET 6图像处理项目
dotnet add package SkiaSharp

2. MAUI中加载图像为SKBitmap

无需通过ImageSource转换,直接从文件路径解码为SkiaSharp的SKBitmap(跨平台通用):

var fileResult = await FilePicker.Default.PickAsync(new PickOptions
{
    FileTypes = FilePickerFileType.Images
});

if (fileResult != null)
{
    // 从文件路径解码为跨平台SKBitmap
    using var inputBitmap = SKBitmap.Decode(fileResult.FullPath);
    
    // 传递给.NET 6项目的处理算法
    using var processedBitmap = MyOtherProjectWithLogicAlgorithms.ProcessAnImage(inputBitmap);
    
    // 保存处理后的图像为PNG
    using var skImage = SKImage.FromBitmap(processedBitmap);
    using var encodedData = skImage.Encode(SKEncodedImageFormat.Png, 100);
    using var outputStream = File.OpenWrite(finalOutputPath);
    
    encodedData.SaveTo(outputStream);
}

3. 适配.NET 6图像处理算法

修改.NET 6项目的算法,将参数从System.Drawing.Bitmap改为SKBitmap,利用SkiaSharp API处理像素:

using SkiaSharp;

public static SKBitmap ProcessAnImage(SKBitmap inputBitmap)
{
    // 创建与输入尺寸一致的输出Bitmap
    var outputBitmap = new SKBitmap(inputBitmap.Width, inputBitmap.Height);
    
    // 获取RGB(A)像素数组,直接操作像素值
    var pixels = inputBitmap.Pixels;
    
    // 示例处理逻辑:反转RGB颜色
    for (int i = 0; i < pixels.Length; i++)
    {
        var originalColor = pixels[i];
        pixels[i] = new SKColor(
            (byte)(255 - originalColor.Red),
            (byte)(255 - originalColor.Green),
            (byte)(255 - originalColor.Blue),
            originalColor.Alpha
        );
    }
    
    // 将处理后的像素写入输出Bitmap
    outputBitmap.Pixels = pixels;
    return outputBitmap;
}

关键优势

  • 全平台兼容:SkiaSharp支持MAUI所有目标平台(Android、iOS、Windows、macOS),无需编写平台分支代码。
  • 低迁移成本:SKBitmap.Pixels直接暴露RGB(A)像素数组,与原System.Drawing.Bitmap的像素操作逻辑一致。
  • 无缝集成.NET 6:.NET 6项目仅需安装SkiaSharp即可直接使用SKBitmap,无需额外适配层。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:10:48