从C#项目资源区加载图像

我的项目中有一个图像存储在Resources / myimage.jpg。 我怎样才能dynamic加载这个图像到Bitmap对象?

15 Solutions collect form web for “从C#项目资源区加载图像”

你使用Windows窗体? 如果您使用属性/资源UI添加了图像,则可以从生成的代码访问图像,因此您可以简单地执行此操作:

var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage); 

您可以通过以下方式获得对图像的引用:

 Image myImage = Resources.myImage; 

如果您想复制图片,则需要执行以下操作:

 Bitmap bmp = new Bitmap(Resources.myImage); 

当你完成它的时候不要忘记处理bmp 。 如果您在编译时不知道资源图像的名称,则可以使用资源pipe理器:

 ResourceManager rm = Resources.ResourceManager; Bitmap myImage = (Bitmap)rm.GetObject("myImage"); 

ResourceManager的好处是你可以在Resources.myImage通常超出范围的地方或者你想要dynamic访问资源的地方使用它。 此外,这适用于声音,configuration文件等

你需要从资源stream中加载它。

 Bitmap bmp = new Bitmap( System.Reflection.Assembly.GetEntryAssembly(). GetManifestResourceStream("MyProject.Resources.myimage.png")); 

如果您想知道assembly体中的所有资源名称,请转到:

 string[] all = System.Reflection.Assembly.GetEntryAssembly(). GetManifestResourceNames(); foreach (string one in all) { MessageBox.Show(one); } 

比大多数提出的答案更容易

 tslMode.Image = global::ProjectName.Properties.Resources.ImageName; 

最好的办法是将它们添加为项目的资源设置中的图像资源。 然后你可以通过Resources.myimage直接获取图像。 这将通过生成的C#属性获取图像。

如果您只是将图像设置为embedded式资源,则可以通过以下方式获取:

 string name = "Resources.myimage.jpg" string namespaceName = "MyCompany.MyNamespace"; string resource = namespaceName + "." + name; Type type = typeof(MyCompany.MyNamespace.MyTypeFromSameAssemblyAsResource); Bitmap image = new Bitmap(type.Assembly.GetManifestResourceStream(resource)); 

其中MyTypeFromSameAssemblyAsResource是您在程序集中具有的任何types。

我在我的几个项目中使用的代码…它假定您只将图像存储在资源中,而不是图标

  public static Bitmap GetImageByName(string imageName) { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); string resourceName = asm.GetName().Name + ".Properties.Resources"; var rm = new System.Resources.ResourceManager(resourceName, asm); return (Bitmap)rm.GetObject(imageName); } 

With和ImageBox命名为“ImagePreview FormStrings.MyImageNames”,它包含一个常规的get / setstring强制转换方法,该方法链接到一个滚动列表types的列表,图像与列表中的链接名称相同,除了.bmp结尾。位图被拖入resources.resx

 Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames); Bitmap myImage = (Bitmap)rm; ImagePreview.Image = myImage; 

在我的情况下 – 我在我的资源中使用图标 ,但我需要dynamic地将它们添加到某些ToolStripMenuItem (s)图像。 所以在我创build的方法(这是下面的代码片段来自哪里),我必须将图标资源转换为位图,然后才能将它们返回给我的MenuItem

 string imageName = myImageNameStr; imageName = imageName.Replace(" ", "_"); Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName); return myIcon.ToBitmap(); 

还有一些需要注意的地方,如果你的图像/图标在你的资源中添加了空格(“”)时,VS会自动用“_”来replace这些空格。 因为在命名资源时,空格不是有效的字符。 这就是为什么我在引用的代码中使用Replace()方法。 你可能会忽略这一行。

我build议:

 System.Reflection.Assembly thisExe; thisExe = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream file = thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg"); Image yourImage = Image.FromStream(file); 

从msdn: http : //msdn.microsoft.com/en-us/library/aa287676( v=vs.71) .aspx

使用Image.FromStream更好,因为你不需要知道图像的格式(bmp,png,…)。

奇怪的是,从devise师的angular度来看,我发现似乎是一个更简单的方法:

该图像似乎可以从.Properties.Resources。

我只是使用一个图像,因为我感兴趣的是将其粘贴到一个带有图像的控件上。

(Net 4.0,VS2010。)

我查看了一个项目的devise器代码,并注意到它使用了这个符号

 myButton.Image = global::MyProjectName.Properties.Resources.max; 

其中max是我上传到项目中的资源的名称。

JDS的答案效果最好。 C#示例加载图像:

  • 包括图像作为资源(项目树 – >资源,右键单击添加所需的文件ImageName.png)
  • embedded资源(项目树 – >资源 – > ImageName.png,右键单击select属性)
  • .png文件格式(.bmp .jpg也应该是OK)

pictureBox1.Image = ProjectName.Properties.Resources.ImageName;

请注意以下几点:

  • 资源图片文件是“ImageName.png”,文件扩展名应该省略。
  • ProjectName也许可以更充分地理解为“程序集名称”,它将成为Project-> Properties页面上的相应文本条目。

示例代码行使用VisualStudio 2015社区成功运行。

或者,您可以在处理WPF或Silverlight时使用这一行,尤其是在XAML标记中已经存在源string的情况下:

 (ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath); 

ImagePath是这样的:

 string ImagePath = "/ProjectName;component/Resource/ImageName.png"; 

你也可以像这样保存在一个变种:

 var bmp = Resources.ImageName; 

希望能帮助到你!

 this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.toolStrip1.Location = new System.Drawing.Point(0, 0); this.toolStrip1.Name = "toolStrip1"; this.toolStrip1.Size = new System.Drawing.Size(444, 25); this.toolStrip1.TabIndex = 0; this.toolStrip1.Text = "toolStrip1"; object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost"); ToolStripButton btn = new ToolStripButton("m1"); btn.DisplayStyle = ToolStripItemDisplayStyle.Image; btn.Image = (Image)O; this.toolStrip1.Items.Add(btn); 
  • 从Alt-Tab程序切换器隐藏窗口的最佳方法是什么?
  • List <T> vs BindingList <T>优点/缺点
  • 在对表单应用不透明度的同时,我们应该使用小数还是双精度值?
  • 检测窗口字号(100%,125%,150%)
  • 如何启动WinForm应用程序最小化到托盘?
  • DataGridView自动调整和填充
  • 当表单加载时如何把焦点放在TextBox上?
  • 如何获取各种MessageBoxImage或MessageBoxIcon(s)的图像?