Dans mon projet, j'ai une image stockée à l'adresse Resources/myimage.jpg. Comment puis-je charger dynamiquement cette image dans un objet Bitmap ?
Non, il est ajouté comme un simple fichier dans le dossier Ressources.
Dans mon projet, j'ai une image stockée à l'adresse Resources/myimage.jpg. Comment puis-je charger dynamiquement cette image dans un objet Bitmap ?
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 devrez faire ce qui suit :
Bitmap bmp = new Bitmap(Resources.myImage);
N'oubliez pas de vous débarrasser de bmp quand vous en aurez fini avec elle. 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 du ResourceManager est que vous pouvez l'utiliser lorsque Resources.myImage serait normalement hors de portée, ou lorsque vous voulez accéder dynamiquement aux ressources. En outre, cela fonctionne pour les sons, les 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 assemblage, allez-y avec :
string[] all = System.Reflection.Assembly.GetEntryAssembly().
GetManifestResourceNames();
foreach (string one in all) {
MessageBox.Show(one);
}
Vous ne devriez pas avoir besoin d'utiliser la réflexion - cela semble trop compliqué étant donné les méthodes plus simples disponibles.
Cette solution ne fonctionne pas en C# / Windows Phone .NETCF --GetManifestResourceNames() ne renvoie qu'un seul nom, celui du module DLL de l'assemblage. Il n'y a qu'une seule ressource disponible dans le manifeste : le blob de flux du module DLL. En l'absence de code C++ et de code non sécurisé permettant d'appeler les API Win32, il est franchement très difficile de travailler avec ce gros morceau de mémoire.
La meilleure chose à faire est de les ajouter en tant que ressources d'image dans les paramètres de ressources du projet. Vous pouvez ensuite obtenir l'image directement en faisant Resources.myimage. Cela permettra d'obtenir 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 assemblage.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Regardez cette réponse : stackoverflow.com/questions/94456/
0 votes
Cette question a été posée plus tard, mais elle est liée, voire identique : stackoverflow.com/questions/13592150/load-image-from-resources