J'ai une image dans mon projet stockée dans Resources/myimage.jpg. Comment puis-je charger dynamiquement cette image dans un objet Bitmap?
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é. Vous pouvez donc le faire simplement:
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 créer une copie de l'image, procédez comme suit:
Bitmap bmp = new Bitmap(Resources.myImage);
N'oubliez pas de vous débarrasser de bmp lorsque vous avez terminé. Si vous ne connaissez pas le nom de l'image de la 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 de ResourceManager est que vous pouvez l'utiliser là où Ressources.myImage serait normalement hors de portée ou lorsque vous souhaitez accéder de manière dynamique à des ressources. De plus, cela fonctionne pour les sons, les fichiers de configuration, etc.
Vous devez le charger depuis le 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 de votre assemblée, procédez comme suit:
string[] all = System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceNames();
foreach (string one in all) {
MessageBox.Show(one);
}
Bien plus facile que la plupart des réponses proposées
tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
La meilleure chose à faire 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 effectuant Ressources.myimage. Cela permettra d'obtenir l'image via une propriété C # générée.
Si vous définissez simplement l'image en tant que ressource incorporé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 un type que vous avez dans votre assembly.
Code que j'utilise dans plusieurs de mes projets ... Il suppose que vous stockez des images dans des ressources uniquement sous forme de bitmaps et non d'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);
}
Utilisez ci-dessous un. J'ai testé cela avec la cellule vue 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 du projet.
Sous le nom du projet, vous pouvez trouver Properties
. Développez-le. Vous pouvez y voir le fichier Resources.resx
. Ouvrez-le. Appliquez votre nom de fichier en tant que "image_ressource".
With et ImageBox nommé "ImagePreview FormStrings.MyImageNames contient une méthode de conversion de chaîne get/set standard, qui sont liées à une liste de types de boîtes de défilement. Les images portent les mêmes noms que les noms liés dans la liste, à l'exception des fins .bmp. Tous les bitmaps sont glissés dans le fichier resources.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 sous la forme Images à une certaine ToolStripMenuItem
(s). Ainsi, dans la méthode que j'ai créée (d'où provient l'extrait de code ci-dessous), j'ai dû convertir les ressources de l'icône en bitmaps avant de pouvoir les renvoyer pour les ajouter à mon MenuItem
.
string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();
Autre élément à 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 "_". 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 de référence. Vous pouvez probablement simplement ignorer cette ligne.
La réponse de JDS a fonctionné mieux. Exemple de chargement d'image C #:
pictureBox1.Image = ProjectName.Properties.Resources.ImageName;
Notez les points suivants:
L'exemple de ligne de code est exécuté avec succès à l'aide de VisualStudio 2015 Community.
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, ...).
Vous pouvez aussi sauvegarder le bmp dans une var comme ceci:
var bmp = Resources.ImageName;
j'espère que ça aide!
Curieusement, en fouillant chez le designer, je trouve ce qui semble être une approche 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 du concepteur de l'un de mes projets et 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.
Ou vous pouvez utiliser cette ligne lorsque vous traitez avec WPF ou Silverlight, en particulier lorsque vous avez la chaîne source déjà dans le balisage XAML:
(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);
Où ImagePath ressemble à quelque chose comme:
string ImagePath = "/ProjectName;component/Resource/ImageName.png";