如何从EmbeddedResource获取资源并访问其中的资源图片?
从EmbeddedResource获取资源及访问图片的方法
一、获取EmbeddedResource资源
要拿到嵌入式资源,关键是通过程序集定位到对应的资源项。你给出的代码已经完成了资源查找和类型转换的核心步骤,完整流程可以参考下面的示例:
// 先获取目标类型所在的程序集 Assembly assembly = typeof(YourTargetType).Assembly; // 查找指定名称的资源(这里用Module的FindResource,也可以用Assembly的相关方法) var resource = module.FindResource($"{type.Namespace}.{type.Name}.resources"); // 确认类型后转换为EmbeddedResource EmbeddedResource embedded = (EmbeddedResource)resource;
⚠️ 注意:资源名称必须和程序集中的实际命名完全匹配,一般格式是命名空间.文件名,如果资源放在子文件夹里,还要加上文件夹路径,比如YourNamespace.SubFolder.ResourceFile.resources。
二、从EmbeddedResource访问资源图片
拿到EmbeddedResource后,需要读取它的流数据,再转换成可用的图片对象,示例代码如下:
// 从EmbeddedResource获取资源流 using (Stream resourceStream = embedded.GetResourceStream()) { // 将流转换为Image对象(如果是.NET Core/.NET 5+,需要先安装System.Drawing.Common NuGet包) using (Image image = Image.FromStream(resourceStream)) { // 这里可以直接使用图片,比如在WinForms控件中显示 pictureBox.Image = (Image)image.Clone(); // 或者保存到本地 image.Save("saved_image.png", ImageFormat.Png); } }
如果觉得先获取EmbeddedResource太麻烦,也可以直接通过程序集的GetManifestResourceStream方法直接拉取图片流,简化代码:
Assembly assembly = typeof(YourTargetType).Assembly; // 替换成你实际的图片资源名称,格式是「命名空间.图片路径.图片名」 string imageResourceName = "YourNamespace.Images.app_icon.png"; using (Stream stream = assembly.GetManifestResourceStream(imageResourceName)) { if (stream != null) { using (Image image = Image.FromStream(stream)) { // 执行你的图片操作 } } }
⚠️ 别忘了把图片文件的「生成操作」设置为「嵌入式资源」(右键图片→属性→生成操作→选嵌入式资源),不然程序集里找不到这个资源。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

