Frage Bild aus Ressourcenbereich des Projekts in C # laden


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


176
2017-07-28 05:20


Ursprung


Antworten:


Verwenden Sie Windows Forms? Wenn Sie das Bild über die Benutzeroberfläche "Eigenschaften / Ressourcen" hinzugefügt haben, erhalten Sie Zugriff auf das Bild aus dem generierten Code. So können Sie Folgendes tun:

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

207
2017-07-28 05:29



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

Image myImage = Resources.myImage;

Wenn du ein machen willst Kopieren des Bildes müssen Sie Folgendes tun:

Bitmap bmp = new Bitmap(Resources.myImage);

Vergiss nicht zu entsorgen BMP wenn du damit fertig bist. Wenn Sie den Namen des Ressourcenabbilds zum Zeitpunkt der Kompilierung nicht kennen, können Sie einen Ressourcenmanager verwenden:

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

Der Vorteil des ResourceManagers ist, dass Sie ihn dort verwenden können, wo Resources.myImage normalerweise nicht verfügbar ist oder wo Sie dynamisch auf Ressourcen zugreifen möchten. Dies funktioniert auch für Sounds, Konfigurationsdateien usw.


101
2017-07-28 05:30



Sie müssen es aus dem Ressourcen-Stream 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 mit:

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

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

66
2017-07-28 05:31



Viel einfacher als die meisten der vorgeschlagenen Antworten

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

25
2018-06-12 15:18



Am besten fügen Sie sie als Bildressourcen in den Ressourceneinstellungen des Projekts hinzu. Dann können Sie das Bild direkt abrufen, indem Sie Resources.myimage ausführen. Dies wird das Bild über eine generierte C # -Eigenschaft erhalten.

Wenn Sie das Bild als eingebettete Ressource festlegen, können Sie es erhalten 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));

Wo MyTypeFromSameAssemblyAsResource ein beliebiger Typ ist, den Sie in Ihrer Assembly haben.


13
2017-07-28 05:31



Code, den ich in einigen meiner Projekte verwende ... Es wird davon ausgegangen, dass Sie Bilder in Ressourcen nur als Bitmaps und nicht als Symbole 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
2018-03-16 13:04



Mit und ImageBox mit dem Namen "ImagePreview FormStrings.MyImageNames enthält eine reguläre Get / Set-String-Cast-Methode, die mit einer Liste von Scrollbox-Typen 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 Datei resources.resx gezogen

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

5
2017-12-10 21:36



In meinem Fall - ich benutzte Symbole in meiner Ressource, aber ich musste sie dynamisch als hinzufügen Bilder für manchen ToolStripMenuItem(s). Also musste ich in der Methode, die ich erstellt habe (wo das Code-Snippet unten herkommt), die Icon-Ressourcen in Bitmaps konvertieren, bevor ich sie für die Hinzufügung zu meinem zurückgeben konnte MenuItem.

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

Etwas anderes ist zu beachten: Wenn Ihr Bild / Symbol Leerzeichen ("") in seinem Namen hat, wenn Sie sie zu Ihrer Ressource hinzufügen, wird VS diese Leerzeichen automatisch durch "_" (s) ersetzen. Denn Leerzeichen sind kein gültiges Zeichen beim Benennen Ihrer Ressource. Deshalb benutze ich das Replace() Methode in meinem referenzierten Code. Sie können diese Zeile wahrscheinlich ignorieren.


5
2017-12-10 18:01



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
2017-09-09 08:52



Die Antwort von JDS hat am besten funktioniert. Beispiel für das Laden eines C # -Bildes:

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

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

Beachten Sie Folgendes:

  • Die Ressourcen-Image-Datei ist "ImageName.png", Dateierweiterung sollte weggelassen werden.
  • ProjectName kann vielleicht besser als "Assemblyname" verstanden werden, was der entsprechende Texteintrag auf der Seite Projekt-> Eigenschaften sein soll.

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


3
2017-07-24 18:48



Seltsamerweise, wenn ich in den Designer stoße, finde ich, was ein viel einfacherer Ansatz zu sein scheint:

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
2018-05-15 03:38