Entwickler-Ecke

IO, XML und Registry - Bild in Stream laden und in Picturebox anzeigen


Raven280438 - Do 07.10.10 21:03
Titel: Bild in Stream laden und in Picturebox anzeigen
Hi,

ich möchte ein Bild in einem FileStream speichern und später in einer PictureBox ausgeben.

C#-Quelltext
1:
2:
3:
4:
5:
6:
FileStream textur_stream;
[...]
StreamReader sr = new StreamReader(this.openFileDialog1.FileName);
this.textur_stream = sr.ReadToEnd();
[...]
this.pB_textur.Image = Image.FromStream(textur_stream);


Das funktioniert aber nicht:
Zitat:

C:\Users\Roman\Documents\Visual Studio 2008\Projects\ST - Textur\ST - Textur\Form1.cs(59,46): error CS0029: Cannot implicitly convert type 'string' to 'System.IO.FileStream'


Kann mir jemand sagen wie ich es richtig mache?


Gruß


Kha - Do 07.10.10 21:57

Ein StreamReader ist ein TextReader, der hat hier sicher nichts zu suchen. Schau dir lieber einmal die FileStream-Konstruktoren an.


Yogu - Do 07.10.10 22:03

Hallo,

wo hast du denn den Code her? Selbst geschrieben?

user profile iconRaven280438 hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
StreamReader sr = new StreamReader(this.openFileDialog1.FileName);                    

Wozu brauchst du denn einen StreamReader?
MSDN [http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx]:
Implementiert einen TextReader, der Zeichen aus einem Bytestream in einer bestimmten Codierung liest.

user profile iconRaven280438 hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
2:
FileStream textur_stream;
this.textur_stream = sr.ReadToEnd();

user profile iconRaven280438 hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
this.pB_textur.Image = Image.FromStream(textur_stream);                    

Die Methode StreamReader.ReadToEnd [http://msdn.microsoft.com/de-de/library/system.io.streamreader.readtoend.aspx] gibt einen String zurück, der den ganzen Streaminhalt als Text enthält.

user profile iconRaven280438 hat folgendes geschrieben Zum zitierten Posting springen:
Kann mir jemand sagen wie ich es richtig mache?

Wenn wirklich einige Zeit zwischen dem Laden und dem zuweisen zur PictureBox vergeht, könntest du den Inhalt des Streams in einem Suche im MSDN MEMORYSTREAM zwischenspeichern:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
// Den Stream zum Zwischenspeichern erstellen
MemoryStream memoryStream = new MemoryStream();

// Die Datei öffnen (wird beim Verlassen des using-Blocks automatisch wieder geschlossen)
using (FileStream fileStream = new FileStream(Dateiname)) {
  // Inhalt des Dateistreams in den Memory-Stream kopieren
  fileStream.CopyTo(memoryStream);
}

// Den Memory-Stream "zurückspulen"
memoryStream.Seek(0, SeekOrigin.Begin);

/* ... */

// Das Bild aus dem Memory-Stream laden
pB_texture.Image = Image.FromStream(memoryStream);


Aber warum öffnest du die Datei nicht einfach erst, wenn du sie brauchst? Existiert sie dann nicht mehr?