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
相关产品推荐
相关产品推荐

