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 simplement le faire:
var bmp =newBitmap(WindowsFormsApplication1.Properties.Resources.myimage);
Non, il est ajouté en tant que fichier brut dans le dossier Resources.
Pavel Bastov
9
Ah ok. Dans ce cas, je pense que @ Hallgrim a obtenu la réponse pour vous en utilisant des flux de ressources. Si vous êtes en utilisant Windows Forms Je vous invite à supprimer l'image et ajouter de nouveau à partir de l'interface utilisateur - beaucoup plus facile de cette façon.
Matt Hamilton
114
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 devrez procéder comme suit:
Bitmap bmp =newBitmap(Resources.myImage);
N'oubliez pas de vous débarrasser de bmp lorsque vous en avez terminé. Si vous ne connaissez pas le nom de l'image de ressource au moment de la compilation, vous pouvez utiliser un gestionnaire de ressources:
L'avantage du ResourceManager est que vous pouvez l'utiliser là où Resources.myImage serait normalement hors de portée, ou là où vous souhaitez accéder dynamiquement aux ressources. De plus, cela fonctionne pour les sons, les fichiers de configuration, etc.
J'essaie de lier l'objet ressource à ma grille de données mais il n'apparaît pas en utilisant votre méthode. La colonne d'image de la grille de données est modélisée.
alice7
70
Vous devez le charger à partir du flux de ressources.
Vous ne devriez pas avoir besoin d'utiliser la réflexion - cela semble trop compliqué étant donné les méthodes plus simples disponibles.
Charlie Salts le
Cette solution ne fonctionne pas en C # / Windows Phone .NETCF --GetManifestResourceNames () ne renvoie qu'un seul nom, celui du module DLL d'assemblage. Il n'y a qu'une seule ressource disponible dans le manifeste - le blob de flux du module DLL. Sans C ++ et un code dangereux vous permettant d'appeler les appels de l'API Win32, c'est vraiment une douleur royale dans le cul de travailler avec ce morceau de mémoire.
Mark Jones
2
Vous pouvez également utiliser typeof(this).Assemblypour faire court.
Sri Harsha Chilakapati
1
@SriHarshaChilakapati typeof(this)ne fonctionnera pas. this.GetType().Assemblyest le plus proche de ce que vous avez dit, mais il est risqué car il reprendra une superclasse héritée qui peut être dans un assemblage différent.
John Gibb
2
@SriHarshaChilakapati typeof(this);ne compile pas. Vous obtenezError 1 Type expected
John Gibb
26
Bien plus facile que la plupart des réponses proposées
Impossible d'accéder de cette façon si le fichier ne fait pas partie du manifeste de ressources car l'OP indique clairement qu'il est simplement ajouté en tant que fichier.
Wobbles
1
Il voulait aussi un Bitmapobjet, pas un Imageobjet.
vapcguy
13
Code que j'utilise dans plusieurs de mes projets ... Il suppose que vous stockez les images dans la ressource uniquement sous forme de bitmaps et non d'icônes
La meilleure chose 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 Resources.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 =newBitmap(type.Assembly.GetManifestResourceStream(resource));
Où MyTypeFromSameAssemblyAsResource est n'importe quel type que vous avez dans votre assembly.
Nom de "Resource_Image", que vous pouvez trouver dans le projet.
Sous le nom du projet, vous pouvez trouver Properties. Développez-le. Là, vous pouvez voir le Resources.resxfichier. Ouvrez-le. Appliquez votre nom de fichier comme "Resource_Image".
Avec et ImageBox nommé "ImagePreview FormStrings.MyImageNames contient une méthode de conversion de chaîne get / set régulière, qui sont liées à une liste de types de boîte de défilement. Les images ont les mêmes noms que les noms liés dans la liste, à l'exception des terminaisons .bmp. Toutes les bitmaps sont glissés dans le resources.resx
Dans mon cas, j'utilisais des icônes dans ma ressource, mais je devais les ajouter dynamiquement en tant qu'images à certaines ToolStripMenuItem. 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 icônes en bitmaps avant de pouvoir les renvoyer pour les ajouter à mon MenuItem.
Autre chose à savoir, si votre image / icône a 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 Replace()méthode dans mon code référencé. Vous pouvez probablement ignorer cette ligne.
Le fichier image de ressource est "ImageName.png", l'extension de fichier doit être omise.
ProjectName peut peut-être être plus adéquatement compris comme "Nom de l'assembly", qui doit être l'entrée de texte respective sur la page Projet-> Propriétés.
L'exemple de ligne de code est exécuté avec succès à l'aide de la communauté VisualStudio 2015.
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:
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é, vous pouvez donc simplement le faire:
la source
Vous pouvez obtenir une référence à l'image de la manière suivante:
Si vous souhaitez faire une copie de l'image, vous devrez procéder comme suit:
N'oubliez pas de vous débarrasser de bmp lorsque vous en avez terminé. Si vous ne connaissez pas le nom de l'image de ressource au moment de la compilation, vous pouvez utiliser un gestionnaire de ressources:
L'avantage du ResourceManager est que vous pouvez l'utiliser là où Resources.myImage serait normalement hors de portée, ou là où vous souhaitez accéder dynamiquement aux ressources. De plus, cela fonctionne pour les sons, les fichiers de configuration, etc.
la source
Vous devez le charger à partir du flux de ressources.
Si vous souhaitez connaître tous les noms de ressources de votre assembly, optez pour:
la source
typeof(this).Assembly
pour faire court.typeof(this)
ne fonctionnera pas.this.GetType().Assembly
est le plus proche de ce que vous avez dit, mais il est risqué car il reprendra une superclasse héritée qui peut être dans un assemblage différent.typeof(this);
ne compile pas. Vous obtenezError 1 Type expected
Bien plus facile que la plupart des réponses proposées
la source
Bitmap
objet, pas unImage
objet.Code que j'utilise dans plusieurs de mes projets ... Il suppose que vous stockez les images dans la ressource uniquement sous forme de bitmaps et non d'icônes
la source
La meilleure chose 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 Resources.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:
Où MyTypeFromSameAssemblyAsResource est n'importe quel type que vous avez dans votre assembly.
la source
Utilisez ci-dessous un. J'ai testé cela avec la cellule de vue Grille du formulaire Windows.
Nom de "Resource_Image", que vous pouvez trouver dans le projet.
Sous le nom du projet, vous pouvez trouver
Properties
. Développez-le. Là, vous pouvez voir leResources.resx
fichier. Ouvrez-le. Appliquez votre nom de fichier comme "Resource_Image".la source
Avec et ImageBox nommé "ImagePreview FormStrings.MyImageNames contient une méthode de conversion de chaîne get / set régulière, qui sont liées à une liste de types de boîte de défilement. Les images ont les mêmes noms que les noms liés dans la liste, à l'exception des terminaisons .bmp. Toutes les bitmaps sont glissés dans le resources.resx
la source
Dans mon cas, j'utilisais des icônes dans ma ressource, mais je devais les ajouter dynamiquement en tant qu'images à certaines
ToolStripMenuItem
. 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 icônes en bitmaps avant de pouvoir les renvoyer pour les ajouter à monMenuItem
.Autre chose à savoir, si votre image / icône a 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
Replace()
méthode dans mon code référencé. Vous pouvez probablement ignorer cette ligne.la source
Je suggère:
De msdn: http://msdn.microsoft.com/en-us/library/aa287676(v=vs.71).aspx
Il est préférable d'utiliser Image.FromStream car vous n'avez pas besoin de connaître le format de l'image (bmp, png, ...).
la source
La réponse de JDS a fonctionné le mieux. Exemple d'image de chargement 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 la communauté VisualStudio 2015.
la source
Vous pouvez également enregistrer le bmp dans un var comme celui-ci:
J'espère que ça aide!
la source
Curieusement, après avoir fouillé dans le concepteur, 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.)
la source
J'ai regardé le code du concepteur de l'un de mes projets et j'ai remarqué qu'il utilisait cette notation
où max est le nom de la ressource que j'ai téléchargée dans le projet.
la source
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:
Où ImagePath est quelque chose comme:
la source
la source