[C#] Bild Ressourcendatei als Stream öffnen

Mr Speicher

Neu angemeldet
Registriert
22 Dez. 2013
Beiträge
83
Hallo ich beschäftige mich gerade mit dem Thema Ressoucendateien hinzufügen, öffnen etc. in Visual Studio 2015 in Verbindung mit C#.

Mir geht es dabei hauptsächlich um eine etwas ältere Lösung die ich gefunden zum öffnen eines Bildes per Stream und ob diese überhaupt noch funktioniert:

Meine Bildressource möchte ich mit einer PictureBox anzeigen. Was an sich schon mal recht einfach über folgenden Code funktioniert:

[src=csharp]pbTest.Image = Properties.Resources.myTestPicture;[/src]

Wenn ich nun den Code von der oben genannten Microsoft Seite für mich verwende, bekomme ich bei der letzten Zeile folgende Fehlermeldung:
Ein Ausnahmefehler des Typs "System.ArgumentException" ist in System.Drawing.dll aufgetreten.Zusätzliche Informationen: Der Wert null ist für stream ungültig.

Vielleicht hat ja jemand eine Idee woran es genau liegen könnte, ich konnte den Fehler bislang nicht finden.

Microsoft Code:
[src=csharp]System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
this.pictureBox1.Image = Image.FromStream(file);[/src]

Von mir für mein Beispiel angepasst:
[src=csharp]System.Reflection.Assembly myAssembly;
myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = myAssembly.GetManifestResourceStream("myAssembly.myTestPicture.jpg");
this.pbTest.Image = Image.FromStream(file);[/src]

Die using-directive System.IO und System.Reflection habe ich auch schon testweise hinzugefügt.


Edit: Danke KaPiTN für die Erklärung.
 
Zuletzt bearbeitet:
Du baust Dir da einen String zusammen, aus einem von Dir selber vergebenen Variabel-Namen und dem Namen des Bildes. Das kann nicht funktionieren.

Schau erst einmal ob die Resource überhaupt vorhanden ist. Dazu müßte Build Action-Eigenschaft im Projektmappen-Explorer auf EmbeddedResource für das Bild stehen.

Dann müßtest Du mit

[src=csharp]string[] resourceNames = myAssembly.GetManifestResourceNames();[/src]

den string finden, den Du dann da einträgst (Eines der Einträge in dem Array)

Der Name der Assembly wäre übrigens

[src=csharp]string nameDerAssembly = myAssembly.GetName().Name;[/src]

Das müßte aber eh der Name Deines Namespaces sein, so daß wahrscheinlich Dein String

nameDerAssembly +"Resources.myTestPicture.jpg" lauten müßte.

PS: Das meiste von dem, was ich hier geschrieben habe, steht übrigens bereits auf der Seite, auf die Dein Link verweist.
 
Zurück
Oben