Charger l'image de la zone de ressources du projet en C#

J'ai une image dans mon projet stockée dans Resources / myimage.jpg. Comment puis-je charger dynamiquement cette image dans un objet Bitmap?

181
demandé sur Margo 2009-07-28 09:20:54

16 réponses

Utilisez-Vous Windows Forms? Si vous avez ajouté l'image à L'aide de L'interface utilisateur propriétés/ressources, vous avez accès à l'image à partir du code généré, de sorte que vous pouvez simplement faire ceci:

var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
211
répondu Matt Hamilton 2009-07-28 05:29:52

, Vous pouvez obtenir une référence à l'image de la manière suivante:

Image myImage = Resources.myImage;

Si vous voulez faire un copie de l'image, vous aurez besoin de ce qui suit:

Bitmap bmp = new Bitmap(Resources.myImage);

N'oubliez pas de disposer de bmp lorsque vous avez terminé avec elle. Si vous ne connaissez pas le nom de l'image de Ressource au moment de la compilation, vous pouvez utiliser un gestionnaire de ressources:

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

L'avantage du ResourceManager est que vous pouvez l'utiliser where Resources.myImage serait normalement hors de portée, ou où vous voulez pour accéder dynamiquement aux ressources. En outre, cela fonctionne pour les sons, fichiers de configuration, etc.

101
répondu Charlie Salts 2009-07-28 17:05:36

Vous devez le charger à partir du flux de ressources.

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

Si vous voulez connaître tous les noms de ressources dans votre assemblée, aller avec:

string[] all = System.Reflection.Assembly.GetEntryAssembly().
  GetManifestResourceNames();

foreach (string one in all) {
    MessageBox.Show(one);
}
66
répondu Josip Medved 2009-07-28 06:15:18

Beaucoup plus facile que la plupart des réponses proposées

tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
25
répondu JDS 2012-06-12 15:18:23

Le mieux est de les ajouter en tant que Ressources D'Image dans les paramètres de ressources du projet. Ensuite, vous pouvez obtenir l'image directement en faisant Ressources.myimage. Cela obtiendra l'image via une propriété c # générée.

Si vous définissez simplement l'image comme ressource intégrée, vous pouvez l'obtenir avec:

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));

Où MyTypeFromSameAssemblyAsResource est tout type que vous avez dans votre assembly.

13
répondu Hallgrim 2014-01-03 19:30:09

Code que j'utilise dans plusieurs de mes projets... Il suppose que vous stockez des images dans la ressource uniquement en tant que bitmaps et non en tant qu'icônes

    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);

    }
12
répondu Gary Kindel 2013-03-16 13:04:29

Avec et ImageBox nommé " ImagePreview FormStrings.MyImageNames contient une méthode get/set string cast régulière, qui est liée à une liste de type scrollbox. Les images ont les mêmes noms que les noms liés sur la liste, à l'exception de la .terminaisons bmp. Toutes les images bitmap sont glissées dans les ressources.resx

Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
5
répondu Violator 2011-12-10 21:36:10

Dans mon cas - j'utilisais icônes dans ma ressource, mais j'avais besoin de les ajouter dynamiquement en tant que Images à certains ToolStripMenuItem (s). Donc, dans la méthode que j'ai créée (d'où vient l'extrait de code ci-dessous), j'ai dû convertir les ressources d'icônes en bitmaps avant de pouvoir les retourner pour les ajouter à mon MenuItem.

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

Autre chose à prendre en compte, si votre image/icône a des espaces (" ") dans son nom lorsque vous les ajoutez à votre ressource, VS les remplacera automatiquement espaces avec " _ " (s). Parce que les espaces ne sont pas un caractère valide lorsque vous nommez votre ressource. C'est pourquoi j'utilise la méthode Replace() dans mon code référencé. Vous pouvez probablement ignorer cette ligne.

5
répondu DSmith 2012-12-10 22:41:45

, je suggère:

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

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

Utilisation De L'Image.FromStream est meilleur parce que vous n'avez pas besoin de connaître le format de l'image (BMP, png, ...).

4
répondu Davide Icardi 2013-09-09 08:52:23

La réponse de JDS a le mieux fonctionné. C # exemple de chargement de l'image:

  • incluez l'image en tant que ressource (arborescence du projet- > Ressources, faites un clic droit pour ajouter le nom d'image du fichier souhaité.png)
  • ressource intégrée (arborescence du projet - > Ressources - > ImageName.png, clic droit, sélectionnez propriétés)
  • .le format de fichier png (.bmp .jpg devrait également être OK)

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

Notez les éléments suivants:

  • le fichier image de la ressource est " ImageName.png", l'extension de fichier doit être omettre.
  • ProjectName peut peut-être être mieux compris comme "Assembly name", qui doit être l'entrée de texte respective sur la page Project - >Properties.

L'exemple de ligne de code est exécuté avec succès à L'aide de la communauté VisualStudio 2015.

4
répondu user3674642 2015-07-24 18:48:13

Vous pouvez également enregistrer le bmp dans une variable comme ceci:

var bmp = Resources.ImageName;

J'espère que ça aide!

3
répondu F.joksch 2017-08-07 09:44:45

Curieusement, en piquant dans le concepteur, je trouve ce qui semble être une approche beaucoup plus simple:

L'image semble être disponible à partir de .Propriété.Ressources.

J'utilise simplement une image car tout ce qui m'intéresse est de la coller dans un contrôle avec une image dessus.

(net 4.0, VS2010.)

2
répondu Loren Pechtel 2012-05-15 03:38:44

J'ai regardé le code du concepteur d'un de mes projets et j'ai remarqué qu'il utilisait cette notation

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

Où max est le nom de la ressource que j'ai téléchargée dans le projet.

2
répondu Andrew Stein 2013-11-19 10:15:02

Utilisez ci-dessous un. J'ai testé cela avec la cellule de vue en grille de Windows form.

Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;

Nom de "Resource_Image", vous pouvez trouver à partir du projet.

Sous le nom du projet, vous pouvez trouver Properties. La développer. Là, vous pouvez voir Resources.resx Fichier. De l'ouvrir. Appliquez votre nom de fichier comme "Resource_Image".

2
répondu Dzero 2018-04-09 03:57:33

Ou vous pouvez utiliser cette ligne lorsque vous traitez avec WPF ou Silverlight, en particulier lorsque vous avez déjà la chaîne source dans le balisage XAML:

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

Où L'ImagePath est quelque chose comme:

string ImagePath  = "/ProjectName;component/Resource/ImageName.png";
0
répondu TChadwick 2015-02-04 20:55:41
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);
-1
répondu IR.Programmer 2014-12-16 10:06:39