You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在C# .NET MAUI中如何读取图片并转换为Color数组?

在C# .NET MAUI中如何读取图片并转换为Color数组?

嘿,刚好我之前也碰到过类似的问题!其实不用写大量平台特定代码就能搞定,.NET MAUI里有跨平台的解决方案,核心是用SkiaSharp——这是MAUI官方推荐的跨平台图形库,在所有MAUI支持的平台(Windows、Android、iOS、macOS等)都能正常工作。

给你一步步拆解怎么做:

第一步:确保项目引入SkiaSharp

大部分新建的MAUI项目默认已经包含了SkiaSharp的引用,但如果你的项目没有,直接在NuGet包管理器里安装SkiaSharp.Views.Maui.Controls就行。

第二步:加载图片为SKBitmap

不管你的图片是来自项目资源、本地文件还是网络流,都能转成SKBitmap。举两个常见场景的例子:

  • 从项目资源加载(假设图片放在Resources/Images目录,生成操作设为MauiImage):
using SkiaSharp;
using Microsoft.Maui.Graphics;

// 获取资源流
var assembly = typeof(YourPageName).Assembly;
using var stream = assembly.GetManifestResourceStream("YourProjectNamespace.Resources.Images.your_image.png");
// 解码为SKBitmap
var skBitmap = SKBitmap.Decode(stream);
  • 从本地文件路径加载
var skBitmap = SKBitmap.Decode("/path/to/your/image.png");

第三步:转换为Color数组

有了SKBitmap之后,就能直接遍历每个像素,把SKColor转成MAUI的Color类型:

// 初始化对应大小的Color数组
Color[] pixelColors = new Color[skBitmap.Width * skBitmap.Height];

for (int y = 0; y < skBitmap.Height; y++)
{
    for (int x = 0; x < skBitmap.Width; x++)
    {
        // 获取当前像素的SKColor
        SKColor skColor = skBitmap.GetPixel(x, y);
        // 转成MAUI的Color
        pixelColors[y * skBitmap.Width + x] = Color.FromRgba(skColor.Red, skColor.Green, skColor.Blue, skColor.Alpha);
    }
}

额外补充:如果已经有图片字节数组

要是你之前通过其他方式拿到了图片的字节数组(比如某些API返回的字节流),也可以直接用SKBitmap.Decode(bytes)把字节数组转成SKBitmap,再按上面的方法生成Color数组就行。

要不要写平台特定代码?

绝大多数情况下完全不用!SkiaSharp的这套逻辑在所有MAUI平台上都能跑通。只有当你有非常特殊的平台专属需求时,才需要考虑用#if分支写平台特定代码,但这种场景很少见。

备注:内容来源于stack exchange,提问作者RemeaMiku

火山引擎 最新活动