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

MAUI中如何将嵌入式资源图片转为byte[]并实现存储与展示

解决方案

一、从嵌入式资源读取图片并转为byte[]

你的图片是嵌入式资源,并非磁盘上的物理文件,因此File.Exists会返回false。直接通过程序集获取资源流完成转换即可:

using System.Reflection;

public static byte[] EmbeddedImageToByteArray(string resourceFullName)
{
    var assembly = Assembly.GetExecutingAssembly();
    // 嵌入式资源完整名称格式:项目命名空间.资源所在路径(路径分隔符用点号代替)
    // 示例:若图片在项目Resources文件夹下,完整名称为 "YourAppNamespace.Resources.hole_in_wall.jpg"
    using var resourceStream = assembly.GetManifestResourceStream(resourceFullName);
    
    if (resourceStream == null)
        throw new FileNotFoundException("未找到指定的嵌入式资源", resourceFullName);
    
    using var memoryStream = new MemoryStream();
    resourceStream.CopyTo(memoryStream);
    return memoryStream.ToArray();
}

使用示例:

// 替换为你实际的嵌入式资源完整名称
byte[] imageBytes = EmbeddedImageToByteArray("YourApp.Resources.hole_in_wall.jpg");
// 将byte[]存入数据库...

二、将byte[]转回ImageSource用于展示

把byte[]转为StreamImageSource即可直接绑定到UI控件展示:

public static ImageSource ByteArrayToImageSource(byte[] imageBytes)
{
    return new StreamImageSource
    {
        Stream = token =>
        {
            var stream = new MemoryStream(imageBytes);
            return Task.FromResult(stream);
        }
    };
}

使用示例:

// 从数据库读取存储的byte[]
byte[] storedImageBytes = GetImageBytesFromDatabase(); // 你的数据库读取逻辑
ImageSource displayImage = ByteArrayToImageSource(storedImageBytes);
// 绑定到Image控件的Source属性
yourImageControl.Source = displayImage;

三、注意事项

  • 确认图片的生成操作:右键图片文件→属性→生成操作→选择嵌入式资源。
  • 可通过assembly.GetManifestResourceNames()输出当前程序集所有嵌入式资源名称,核对你要读取的资源完整命名是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:03:23