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

如何使用GetManifestResourceStream从资源加载图片(含文件夹内图片)

从嵌入式资源加载图片(无.resx文件)

当你把图片设为Build Action = Resource且放在项目文件夹中时,核心问题是资源名称的格式——系统会把文件夹结构转换成以点.分隔的命名空间格式,而非原文件夹的斜杠/。

正确步骤与代码示例

1. 确认资源名称格式

你通过GetResourceNames拿到的testImages/add_32x32.png需要转换成程序集名.文件夹名.文件名的格式,示例中应为VisualStudioTest.testImages.add_32x32.png。

如果不确定正确名称,直接输出所有资源名来验证:

using System.Reflection;

var assembly = Assembly.GetExecutingAssembly();
foreach (var name in assembly.GetManifestResourceNames())
{
    Console.WriteLine(name); // 复制输出的正确名称直接使用
}

2. WPF项目加载图片

两种方式可选:

  • 基于程序集流加载:
using System.Reflection;
using System.Windows.Media.Imaging;

var assembly = Assembly.GetExecutingAssembly();
var resourceName = "VisualStudioTest.testImages.add_32x32.png";

using (var stream = assembly.GetManifestResourceStream(resourceName))
{
    if (stream == null)
        throw new FileNotFoundException("指定资源未找到", resourceName);
    
    var bitmap = new BitmapImage();
    bitmap.BeginInit();
    bitmap.StreamSource = stream;
    bitmap.CacheOption = BitmapCacheOption.OnLoad; // 防止流关闭后图片失效
    bitmap.EndInit();
    
    // 示例:赋值给WPF Image控件
    // imageControl.Source = bitmap;
}
  • 直接用Pack URI加载(更简洁):
using System.Windows.Media.Imaging;

// URI格式:pack://application:,,,/程序集名;component/文件夹路径/文件名
var bitmap = new BitmapImage(new Uri("pack://application:,,,/VisualStudioTest;component/testImages/add_32x32.png"));
// imageControl.Source = bitmap;

3. WinForms项目加载图片

using System.Drawing;
using System.Reflection;

var assembly = Assembly.GetExecutingAssembly();
var resourceName = "VisualStudioTest.testImages.add_32x32.png";

using (var stream = assembly.GetManifestResourceStream(resourceName))
{
    if (stream == null)
        throw new FileNotFoundException("指定资源未找到", resourceName);
    
    var image = Image.FromStream(stream);
    // 示例:赋值给WinForms PictureBox控件
    // pictureBox.Image = image;
}

关键注意事项

  • 确保图片的Build Action确实设置为Resource(而非Embedded Resource,两者的资源命名规则不同);
  • 程序集名称要和项目输出的程序集名一致(可在项目属性的"应用"标签中查看);
  • 复制GetManifestResourceNames输出的完整资源名,避免手动输入时出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:25:55