J’ai une image dans mon projet stockée dans Resources / myimage.jpg. Comment charger dynamicment cette image dans un object Bitmap?
Utilisez-vous Windows Forms? Si vous avez ajouté l’image à l’aide de l’interface utilisateur Propriétés / Ressources, vous avez access à l’image à partir du code généré. Vous pouvez donc 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 souhaitez faire une copie de l’image, vous devez procéder comme suit:
Bitmap bmp = new Bitmap(Resources.myImage);
N’oubliez pas de jeter bmp lorsque vous en avez fini avec. Si vous ne connaissez pas le nom de l’image de la ressource à la compilation, vous pouvez utiliser un gestionnaire de ressources:
ResourceManager rm = Resources.ResourceManager; Bitmap myImage = (Bitmap)rm.GetObject("myImage");
L’avantage de ResourceManager est que vous pouvez l’utiliser lorsque Ressources.myImage est normalement hors de scope ou que vous souhaitez accéder dynamicment aux ressources. De plus, cela fonctionne pour les sons, les fichiers de configuration, etc.
Vous devez le charger à partir du stream de ressources.
Bitmap bmp = new Bitmap( System.Reflection.Assembly.GetEntryAssembly(). GetManifestResourceStream("MyProject.Resources.myimage.png"));
Si vous souhaitez connaître tous les noms de ressources de votre assembly, consultez:
ssortingng[] all = System.Reflection.Assembly.GetEntryAssembly(). GetManifestResourceNames(); foreach (ssortingng one in all) { MessageBox.Show(one); }
Bien plus simple que la plupart des réponses proposées
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
La meilleure chose à faire est de les append en tant que ressources d’image dans les parameters 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 en tant que ressource intégrée, vous pouvez l’obtenir avec:
ssortingng name = "Resources.myimage.jpg" ssortingng namespaceName = "MyCompany.MyNamespace"; ssortingng 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 en ressource uniquement sous forme de bitmaps et non d’icons
public static Bitmap GetImageByName(ssortingng imageName) { System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); ssortingng resourceName = asm.GetName().Name + ".Properties.Resources"; var rm = new System.Resources.ResourceManager(resourceName, asm); return (Bitmap)rm.GetObject(imageName); }
Avec et ImageBox nommée “ImagePreview FormSsortingngs.MyImageNames contient une méthode de conversion de chaîne get / set standard, qui sont liées à une liste de types de scrollbox. Les images ont les mêmes noms que les noms liés dans la liste, à l’exception des terminaisons .bmp. les bitmaps sont glissés dans le fichier resources.resx
Object rm = Properties.Resources.ResourceManager.GetObject(FormSsortingngs.MyImageNames); Bitmap myImage = (Bitmap)rm; ImagePreview.Image = myImage;
Dans mon cas, j’utilisais des icons dans ma ressource, mais je devais les append dynamicment en tant qu’images à certains ToolSsortingpMenuItem
. Donc, dans la méthode que j’ai créée (d’où provient l’extrait de code ci-dessous), j’ai dû convertir les ressources des icons en bitmaps avant de pouvoir les retourner pour les append à mon MenuItem
.
ssortingng 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 comporte des espaces (“”) dans son nom lorsque vous les ajoutez à votre ressource, VS remplacera automatiquement ces espaces par “_” (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
Utiliser Image.FromStream est préférable car vous n’avez pas besoin de connaître le format de l’image (bmp, png, …).
La réponse de JDS a fonctionné le mieux. C # exemple chargement image:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Notez les points suivants:
L’exemple de ligne de code est exécuté avec succès en utilisant VisualStudio 2015 Community.
Vous pouvez également enregistrer le bmp dans une var comme ceci:
var bmp = Resources.ImageName;
J’espère que cela aide!
Curieusement, en fouillant le concepteur, je trouve que l’approche semble beaucoup plus simple:
L’image semble être disponible à partir de .Properties.Resources.
J’utilise simplement une image car tout ce qui m’intéresse, c’est de la coller dans un contrôle avec une image dessus.
(Net 4.0, VS2010.)
J’ai regardé le code de concepteur de l’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. Je l’ai testé avec la cellule Grid view de Windows form.
Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image"); Bitmap myImage = (Bitmap)rm; Image image = myImage;
Nom de “Resource_Image”, que vous pouvez trouver dans le projet.
Sous le nom du projet, vous pouvez trouver des Properties
. Développez-le Là, vous pouvez voir le fichier Resources.resx
. Ouvrez-le Appliquez votre nom de fichier en tant que “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().ConvertFromSsortingng(ImagePath);
Où le ImagePath est quelque chose comme:
ssortingng ImagePath = "/ProjectName;component/Resource/ImageName.png";
this.toolSsortingp1 = new System.Windows.Forms.ToolSsortingp(); this.toolSsortingp1.Location = new System.Drawing.Point(0, 0); this.toolSsortingp1.Name = "toolSsortingp1"; this.toolSsortingp1.Size = new System.Drawing.Size(444, 25); this.toolSsortingp1.TabIndex = 0; this.toolSsortingp1.Text = "toolSsortingp1"; object O = global::WindowsFormsApplication1.Properties.Resources.ResourceManager.GetObject("best_robust_ghost"); ToolSsortingpButton btn = new ToolSsortingpButton("m1"); btn.DisplayStyle = ToolSsortingpItemDisplayStyle.Image; btn.Image = (Image)O; this.toolSsortingp1.Items.Add(btn);