Forum: PC-Programmierung datenstream in Image umwandeln


von Cedric Oettel (Gast)


Lesenswert?

Hi,
Das Programm ist in C#!!
ich habe einen Clienten und einen Server programmiert.Die Verbindung
funktioniert und auch das Filestream.

Meine Frage ist:
Ich würde gern ein Bild vom Server schicken und dieses SOFORT in einer
PicturBox im Clienten anzeigen lassen.
Mit welchen Stream geht man an die sache?
Muss man die bytes auslesen und "per hand" umwandeln lassen?

Danke im vorraus ^^'


MfG Cedric Oettel

von Pepe (Gast)


Lesenswert?

Hallo,

im einfachsten Fall sollte das ungefähr so funktionieren:

Bitmap newBitmap = Image.FromStream(tcpclient.GetStream()) as Bitmap;
pictureBox1.Image = newBitmap;

Ich weiß jetzt natürlich nicht wie dein Client aussieht deshalb musst
du das höchstwahrscheinlich anpassen. Bin mal von TcpClient aus
System.Net.Sockets ausgegangen.

gruß
Pepe

von Cedric Oettel (Gast)


Lesenswert?

also ich hab das jetzt eingebaut.Scheint jetzt auch logisch ^^'
Jedoch wenn ich
Bitmap bmp = Image.FromStream(clientsocket.
eingebe erhalte ich nur
-GetType
-GetHashCode
-GetSocketOption

und die anderen....(Recieve,Connect,Shutdown usw...)
Weiß jetzt nich wie ich das anwenden soll.

MfG Cedric Oettel

von Cedric Oettel (Gast)


Lesenswert?

ahh sorry...mein Fehler...ich hab eine Verbindung über nen Socket
gemacht,statt eines TcpClientens.

Was is der unterschied zwischen
Socket und TcpClient?

MfG Cedric Oettel

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

für das Netzwerk ist beides das gleiche. Beide bieten eine TCP/IP
Verbindung an (TcpClient in Verbindung mit TcpListener). Die Klasse
TcpClient abstrahiert die Verbindung für dich als Programmierer etwas
besser da du wirklich einen Stream hast und nicht mehr einzelne Pakete
hin und herschieben mußt sondern eben auf einem Stream arbeitest.

Socket implementiert das Standard TCP Interface wie es auf allen
Netzwerk- und TCP fähigen Betriebssystemen vorhanden sein sollte.
TcpClient ist einfach etwas komfortabler.

Matthias

von Cedric Oettel (Gast)


Angehängte Dateien:

Lesenswert?

@ Matthias
ahh danke....

Also ich hab jetzt mal vom Server aus eine .JPG file per NetworkStream
gesendet.Beim Clienten erhalte ich diese auch als Bytes.
Das umwandeln in eine Bild datei ist auch nicht (mehr) das Problem.
da nutz ich den MemoryStream und Image.FromStream

Das Bild wird jedoch nicht komplett dargestellt.
An dem Buffer kann es eigentlich nicht liegen,weil ich den schon
mehrfach erhöht hatte.

Ich denke,das der Stream nur eine bestimmte Länge überträgt,die leider
in einer "long" festgelegt werden musste.

Woran kann es liegen? Wenn ihr den Quellcode dazu benötigt,dann bitte
sagen,dann setzt ich ihn noch rein.

MfG Cedric Oettel

von Cedric Oettel (Gast)


Lesenswert?

Weiß keiner warum das so is?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

keine Ahung. Aber du kannst den Code ja mal hier rein stellen dann werf
ich mal einen Blick drauf und teste das hier lokal.

Matthias

von Cedric Oettel (Gast)


Lesenswert?

also ich hab den Quelltext von folgender Seite.

http://www.uni-koblenz.de/~hagbard/csharp/csharp_03.html

genau diesen. ACHTUNG!!! bei Firefox wird die Seite total falsch
dargestellt. Beim Internet Explorer nicht.

Die Datei ,die ich schicke ist etwa 20kb groß.
die Umwandlung lautet dann.
MemoryStream ms = new MemoryStream(buffer,0,rec.Length);
Image im = Image.FromStream(ms);
this.pictureBox2.BackgroundImage = im;

Ich möchte mich entschuldigen,dass ich einen kleinen code hier gepostet
habe und eine URL!!!

MfG Cedric Oettel

von Turbohubert (Gast)


Angehängte Dateien:

Lesenswert?

LOL, ist das wieder Firefoxgülle oder warum ist die Darstellung so
sch...?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

also irgendwie kann ich nicht erkennen wo da ein Image rübergeschoben
werden soll.

Matthias

von Cedric Oettel (Gast)


Angehängte Dateien:

Lesenswert?

ahh ok.
Also beschreib jetzt mal den Programmaufbau.
ACHTUNG!!!! Bin noch ein ziemlicher Noob in C# und habe einen
schrecklichen Programmierstile.

Also:
Ich möchte ja Bilder(vom Desktop) aufnehmen und dann gleich per Stream
über internet an einen Clienten schicken,der dann diese Bilder gleich
in  einer Picturebox oder als hintergrundbild der Form sieht.

Also hab mir so gedacht,dass ich das über die screenshotfunktion
machen.
Die Funktion wird per Timer aller 200 ms ausgelöst,damit ein flüssiges
Bild entsteht.
Das Problem beim übertragen ist,das die verbindung ständig sein muss.

Ich habe meinen komplette Quelltext jetzt doch mal angehangen...

Bei Fragen(ich hoffe doch) BItte einfach melden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.