it-swarm.com.de

Bild aus Ressourcenbereich des Projekts in C # laden

Ich habe ein Bild in meinem Projekt unter Resources/myimage.jpg gespeichert. Wie kann ich dieses Bild dynamisch in ein Bitmap-Objekt laden?

202
Pavel Bastov

Verwenden Sie Windows Forms? Wenn Sie das Bild über die Benutzeroberfläche "Eigenschaften/Ressourcen" hinzugefügt haben, können Sie über den generierten Code auf das Bild zugreifen. Gehen Sie dazu einfach folgendermaßen vor:

var bmp = new Bitmap(WindowsFormsApplication1.Properties.Resources.myimage);
234
Matt Hamilton

Sie können auf folgende Weise einen Verweis auf das Bild erhalten:

Image myImage = Resources.myImage;

Wenn Sie eine Kopie des Bildes erstellen möchten, müssen Sie folgende Schritte ausführen:

Bitmap bmp = new Bitmap(Resources.myImage);

Vergessen Sie nicht, bmp zu entsorgen, wenn Sie damit fertig sind. Wenn Sie den Namen des Ressourcenabbilds zur Kompilierungszeit nicht kennen, können Sie einen Ressourcenmanager verwenden:

ResourceManager rm = Resources.ResourceManager;
Bitmap myImage = (Bitmap)rm.GetObject("myImage");

Der Vorteil des ResourceManager besteht darin, dass Sie ihn dort verwenden können, wo Resources.myImage normalerweise außerhalb des Bereichs liegt oder wo Sie dynamisch auf Ressourcen zugreifen möchten. Dies funktioniert auch für Sounds, Konfigurationsdateien usw.

109
Charlie Salts

Sie müssen es aus dem Ressourcenstrom laden.

Bitmap bmp = new Bitmap(
  System.Reflection.Assembly.GetEntryAssembly().
    GetManifestResourceStream("MyProject.Resources.myimage.png"));

Wenn Sie alle Ressourcennamen in Ihrer Assembly kennen möchten, gehen Sie wie folgt vor:

string[] all = System.Reflection.Assembly.GetEntryAssembly().
  GetManifestResourceNames();

foreach (string one in all) {
    MessageBox.Show(one);
}
69
Josip Medved

Viel einfacher als die meisten anderen vorgeschlagenen Antworten

tslMode.Image = global::ProjectName.Properties.Resources.ImageName;
25
JDS

Am besten fügen Sie sie als Bildressourcen in den Ressourceneinstellungen des Projekts hinzu. Dann können Sie das Bild direkt mit Resources.myimage abrufen. Dadurch wird das Bild über eine generierte C # -Eigenschaft abgerufen.

Wenn Sie das Bild nur als eingebettete Ressource festlegen, erhalten Sie es mit:

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));

Wobei MyTypeFromSameAssemblyAsResource jeder Typ ist, den Sie in Ihrer Assembly haben.

13
Hallgrim

Code, den ich in mehreren meiner Projekte verwende ... Es wird vorausgesetzt, dass Sie Bilder nur als Bitmaps und nicht als Symbole in der Ressource speichern

    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);

    }
12
Gary Kindel

Verwenden Sie unter einem. Ich habe dies mit der Rasteransichtszelle von Windows Form getestet.

Object rm = Properties.Resources.ResourceManager.GetObject("Resource_Image");
Bitmap myImage = (Bitmap)rm;
Image image = myImage;

Den Namen "Resource_Image" finden Sie im Projekt.

Unter dem Projektnamen finden Sie Properties. Es ausweiten. Dort sehen Sie die Datei Resources.resx. Öffne es. Wenden Sie Ihren Dateinamen als "Resource_Image" an.

6
Dzero

Mit und ImageBox mit dem Namen "ImagePreview FormStrings.MyImageNames" enthält eine reguläre get/set-String-Cast-Methode, die mit einer Scrollbox-Typliste verknüpft ist. Die Bilder haben dieselben Namen wie die verknüpften Namen in der Liste, mit Ausnahme der BMP-Endungen. Alle Bitmaps werden in die resources.resx gezogen

Object rm = Properties.Resources.ResourceManager.GetObject(FormStrings.MyImageNames);
Bitmap myImage = (Bitmap)rm;
ImagePreview.Image = myImage;
5
Violator

In meinem Fall habe ich Icons in meiner Ressource verwendet, aber ich musste sie dynamisch als Images zu einigen ToolStripMenuItem (s) hinzufügen. Daher musste ich in der von mir erstellten Methode (aus der der folgende Codeausschnitt stammt) die Symbolressourcen in Bitmaps konvertieren, bevor ich sie zum Hinzufügen zu meinem MenuItem zurückgeben konnte.

string imageName = myImageNameStr;
imageName = imageName.Replace(" ", "_");
Icon myIcon = (Icon)Resources.ResourceManager.GetObject(imageName);
return myIcon.ToBitmap();

Beachten Sie Folgendes: Wenn Ihr Bild/Symbol beim Hinzufügen zu Ihrer Ressource Leerzeichen ("") enthält, ersetzt VS diese Leerzeichen automatisch durch "_" (s). Weil Leerzeichen kein gültiges Zeichen sind, wenn Sie Ihre Ressource benennen. Aus diesem Grund verwende ich in meinem Code, auf den verwiesen wird, die Methode Replace(). Sie können diese Zeile wahrscheinlich einfach ignorieren.

5
DSmith

Die Antwort von JDS hat am besten funktioniert. Beispiel für das Laden von Bildern in C #:

  • Fügen Sie das Bild als Ressource hinzu (Projektbaum-> Ressourcen, klicken Sie mit der rechten Maustaste, um die gewünschte Datei ImageName.png hinzuzufügen)
  • Eingebettete Ressource (Projektbaum-> Ressourcen-> ImageName.png, rechte Maustaste, Eigenschaften auswählen)
  • .png-Dateiformat (.bmp .jpg sollte auch OK sein)

pictureBox1.Image = ProjectName.Properties.Resources.ImageName;

Beachten Sie Folgendes:

  • Die Ressourcen-Image-Datei lautet "ImageName.png", die Dateierweiterung sollte weggelassen werden.
  • Projektname kann möglicherweise besser als "Assemblyname" verstanden werden. Dies ist der entsprechende Texteintrag auf der Seite Projekt-> Eigenschaften.

Die Beispielcodezeile wird erfolgreich mit VisualStudio 2015 Community ausgeführt.

4
user3674642

Ich schlage vor:

System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);

Von msdn: http://msdn.Microsoft.com/en-us/library/aa287676 (v = vs.71) .aspx

Die Verwendung von Image.FromStream ist besser, da Sie das Format des Bildes (bmp, png, ...) nicht kennen müssen.

4
Davide Icardi

Sie können das bmp auch in einer Var wie folgt speichern:

var bmp = Resources.ImageName;

ich hoffe es hilft!

3
F.joksch

Seltsamerweise finde ich nach dem Stöbern im Designer einen viel einfacheren Ansatz:

Das Bild scheint von .Properties.Resources verfügbar zu sein.

Ich verwende einfach ein Bild, da ich nur daran interessiert bin, es in ein Steuerelement mit einem Bild einzufügen.

(Net 4.0, VS2010.)

2
Loren Pechtel

Ich habe mir den Designer-Code aus einem meiner Projekte angesehen und festgestellt, dass er diese Notation verwendet

myButton.Image = global::MyProjectName.Properties.Resources.max;

dabei ist max der Name der Ressource, die ich in das Projekt hochgeladen habe.

2
Andrew Stein

Sie können diese Zeile auch verwenden, wenn Sie mit WPF oder Silverlight arbeiten, insbesondere wenn die Quellzeichenfolge bereits im XAML-Markup enthalten ist:

(ImageSource)new ImageSourceConverter().ConvertFromString(ImagePath);

Wo der ImagePath ist so etwas wie:

string ImagePath  = "/ProjectName;component/Resource/ImageName.png";
1
TChadwick