在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




