I have an image in my project stored at Resources/myimage.jpg. How can I dynamically load this image into Bitmap object?
-
1Look at this answer: http://stackoverflow.com/questions/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap/7375570#7375570 – Roland Sep 11 '11 at 01:05
-
This was a question that was asked later, but is related, if not a duplicate: http://stackoverflow.com/questions/13592150/load-image-from-resources – vapcguy Mar 22 '17 at 22:10
17 Answers
Are you using Windows Forms? If you've added the image using the Properties/Resources UI, you get access to the image from generated code, so you can simply do this:
var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);

- 200,371
- 61
- 386
- 320
-
-
10Ah ok. In that case I think @Hallgrim's got the answer for you using resource streams. If you *are* using Windows Forms I would urge you to delete the image and re-add it from the UI - much easier that way. – Matt Hamilton Jul 28 '09 at 05:36
You can get a reference to the image the following way:
Image myImage = Resources.myImage;
If you want to make a copy of the image, you'll need to do the following:
Bitmap bmp = new Bitmap(Resources.myImage);
Don't forget to dispose of bmp when you're done with it. If you don't know the name of the resource image at compile-time, you can use a resource manager:
ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");
The benefit of the ResourceManager is that you can use it where Resources.myImage would normally be out of scope, or where you want to dynamically access resources. Additionally, this works for sounds, config files, etc.

- 13,109
- 7
- 49
- 78
-
25
-
1I am trying to bind the resource object to my datagrid but it is not showing up using your method. The datagrid image column is templatized. – alice7 Jun 06 '11 at 23:33
-
I tried converting that first line to VB but doesn't work for VB :( Any idea why? This is what I tried: Dim QR As Image = Resources.SampleQRCode.png – Zeek2 Jun 27 '22 at 10:26
-
You need to load it from resource stream.
Bitmap bmp = new Bitmap(
System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceStream("MyProject.Resources.myimage.png"));
If you want to know all resource names in your assembly, go with:
string[] all = System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceNames();
foreach (string one in all) {
MessageBox.Show(one);
}

- 40,917
- 20
- 104
- 186

- 3,631
- 1
- 28
- 36
-
34You should not need to use reflection - this seems overly complicated given the simpler methods available. – Charlie Salts Jul 28 '09 at 05:33
-
This solution doesn't work in C# / Windows Phone .NETCF --GetManifestResourceNames() only returns a single name, that of the assembly-DLL module. There is only one resource available in the manifest -- the stream blob of the DLL module. Without C++ and unsafe code allowing you to call Win32 API calls, it is frankly a royal pain in the arse to work with this chunk of memory. – Mark Jones Mar 06 '13 at 18:36
-
2
-
2@SriHarshaChilakapati `typeof(this)` will not work. `this.GetType().Assembly` is the closest to what you said, but it's risky because it'll pick up on an inherited superclass which may be in a different assembly. – John Gibb Jan 03 '14 at 19:32
-
@JohnGibb Could you please clarify me? I think `typeof(this)` is equal to `this.GetType()` isn't it? – Sri Harsha Chilakapati Jan 07 '14 at 16:04
-
3@SriHarshaChilakapati `typeof(this);` doesn't compile. You get `Error 1 Type expected` – John Gibb Jan 07 '14 at 16:32
Way easier than most all of the proposed answers
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;

- 299
- 3
- 2
-
1Cannot access that way if the file is not part of the resources manifest as the OP clearly states it is just added as a file. – Wobbles Jan 19 '16 at 12:04
-
1
The best thing is to add them as Image Resources in the Resources settings in the Project. Then you can get the image directly by doing Resources.myimage. This will get the image via a generated C# property.
If you just set the image as Embedded Resource you can get it with:
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));
Where MyTypeFromSameAssemblyAsResource is any type that you have in your assembly.
-
1"namespace" cannot be used as variable name and how you arrive at MyTypeFromSameAssemblyAsResource would be appreciated. – Jason Fuerstenberg Aug 16 '12 at 04:11
-
Code I use in several of my projects... It assumes that you store images in resource only as bitmaps not icons
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);
}

- 17,071
- 7
- 49
- 66
Use below one. I have tested this with Windows form's Grid view cell.
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;
Name of "Resource_Image", you can find from the project.
Under the project's name, you can find Properties
. Expand it. There you can see Resources.resx
file. Open it. Apply your file name as "Resource_Image".

- 4,177
- 11
- 45
- 65

- 161
- 1
- 4
JDS's answer worked best. C# example loading image:
- Include the image as Resource (Project tree->Resources, right click to add the desirable file ImageName.png)
- Embedded Resource (Project tree->Resources->ImageName.png, right click select properties)
- .png file format (.bmp .jpg should also be OK)
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Note the followings:
- The resource image file is "ImageName.png", file extension should be omitted.
- ProjectName may perhaps be more adequately understood as "Assembly name", which is to be the respective text entry on the Project->Properties page.
The example code line is run successfully using VisualStudio 2015 Community.

- 219
- 3
- 2
I suggest:
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);
From msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Using Image.FromStream is better because you don't need to know the format of the image (bmp, png, ...).

- 11,919
- 8
- 56
- 77
You can also save the bmp in a var like this:
var bmp = Resources.ImageName;
hope it helps!

- 132
- 1
- 6
In my case -- I was using Icons in my resource, but I needed to add them dynamically as Images to some ToolStripMenuItem
(s). So in the method that I created (which is where the code snippet below comes from), I had to convert the icon resources to bitmaps before I could return them for addition to my MenuItem
.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
Something else to be aware of, if your image/icon has spaces (" ") in its name when you add them to your resource, VS will automatically replace those spaces with "_"(s). Because, spaces are not a valid character when naming your resource. Which is why I'm using the Replace()
method in my referenced code. You can likely just ignore that line.

- 3,741
- 12
- 49
- 72

- 51
- 1
- 1
With and ImageBox named "ImagePreview FormStrings.MyImageNames contains a regular get/set string cast method, which are linked to a scrollbox type list. The images have the same names as the linked names on the list, except for the .bmp endings. All bitmaps are dragged into the resources.resx
Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;

- 51
- 1
- 1
Strangely enough, from poking in the designer I find what seems to be a much simpler approach:
The image seems to be available from .Properties.Resources.
I'm simply using an image as all I'm interested in is pasting it into a control with an image on it.
(Net 4.0, VS2010.)

- 8,945
- 3
- 33
- 45
I looked at the designer code from one of my projects and noticed it used this notation
myButton.Image = global::MyProjectName.Properties.Resources.max;
where max is the name of the resource I uploaded into the project.

- 29
- 3
Or you could use this line when dealing with WPF or Silverlight, especially where you have the source string already in the XAML markup:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
Where the ImagePath is something like:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";

- 868
- 10
- 19
This is how I manage to create an ImageList from a Resource (.rc) file of a windows forms application:
ImageList imgList = new ImageList();
var resourceSet = DataBaseIcons.ResourceManager.GetResourceSet(CultureInfo.CreateSpecificCulture("en-EN"), true, true);
foreach (var r in resourceSet)
{
Logger.LogDebug($"Resource Type {((DictionaryEntry)r).Key.ToString()} is of {((DictionaryEntry)r).Value.GetType()}");
if (((DictionaryEntry)r).Value is Bitmap)
{
imgList.Images.Add(((Bitmap)(((DictionaryEntry)r).Value)));
}
else
{
Logger.LogWarning($"Resource Type {((DictionaryEntry)r).Key.ToString()} is of type {((DictionaryEntry)r).Value.GetType()}");
}
}
-
1Welcome to Stackoverflow. This question is asked more than 13 years ago and it has an accepted answer. Please add some details about the reason you are adding a new answer. – MD Zand Dec 02 '22 at 18:52
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);

- 119
- 3
- 4