从C#项目资源区加载图像
我的项目中有一个图像存储在Resources / myimage.jpg。 我怎样才能dynamic加载这个图像到Bitmap对象?
你使用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);