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?
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);
, 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.
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);
}
Beaucoup plus facile que la plupart des réponses proposées
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
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.
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);
}
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;
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.
, 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, ...).
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.
Vous pouvez également enregistrer le bmp dans une variable comme ceci:
var bmp = Resources.ImageName;
J'espère que ça aide!
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.)
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.
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".
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";
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);