Laden...

byteArray aus Stream gelesen,aber nun convertieren?

Erstellt von Gaara-BTK vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.033 Views
G
Gaara-BTK Themenstarter:in
12 Beiträge seit 2005
vor 18 Jahren
byteArray aus Stream gelesen,aber nun convertieren?

Hi,...

Es handelt sich um ein Programm was den Desktop aufnimmt und dann diese Daten(Bilder) an einen Clienten schickt,der diese dann angezeigt bekommt(eine art Video).

PROBLEM: Es wird nur ca. 5% vom Bild angezeigt.

Jetzt zum Clienten,der die Daten wieder aus dem Stream auslesen muss!

als ich die daten folgenderweise ausgelesen hatte gab es das 5% Prob.


while (clientsocket != null)
	{
		byte []buffer = new byte[36769];
		int iBytes = clientsocket.Receive(buffer);
		MemoryStream ms = new MemoryStream(buffer);
		Image im = Image.FromStream(ms);
		this.pictureBox2.BackgroundImage = im;
		this.label1.Text = "Bild übertragen";
	}

hier wird das 1 mal durchgeführt und beim 2. durchlaufen(clientsocket != null) bricht das beim Darstellen ab.

Also hab ich mir gedacht,das ich die Daten erst auslese und dann als image(daten) nehme.
Das Auslesen des Streams mit den vorhandenen Daten:


      MemoryStream ms = new MemoryStream(buffer);

       byteArray = new byte[ms.Length];
       count = ms.Read(byteArray, 0, 10);
       // Read the remaining bytes, byte by byte.
	while(count < ms.Length)
	{
		byteArray[count++] = Convert.ToByte(ms.ReadByte());
        }

so....jetzt hab ich die Daten von dem Stream ja da.Diese liegen jetzt in dem byteArray.

Um das Image zu "convertieren", hab ich mir folgendes gedacht:


MemoryStream ms = new MemoryStream(buffer)
Image im = Image.FromStream(ms);
this.pictureBox2.BackgroundImage = im;
this.label1.Text = "Bild übertragen";

////// hier  das aber nur,das das erste paket was vom stream ausgelesen wurde umgewandelt wird.

Das Problem ist aber,dass ich die Daten ja schon ausgelesen hab und diese im ByteArray liegen.
Wie kann ich diese Daten nun in ein Bild convertieren?

ICH WEIß DAS ES NOCH FRAGEN GIBT,DIESE BEANTWORTE ICH GERNE,ALSO FRAGT...!!! ^^
Thx for help!

MfG Gaara[BTK]

P
939 Beiträge seit 2003
vor 18 Jahren

Hi,

byte []buffer = new byte[36769];

Passt das komplette Bild des Desktops überhaupt in 35 kByte?

int iBytes = clientsocket.Receive(buffer);

Der Aufruf schreibt nur so viele Bytes in den Buffer, wie in iBytes zurückgegeben wird. Receive muss mehrfach aufgerufen werden, um das Bild komplett zu empfangen. Der Inhalt des Buffers muss dafür natürlich jedes Mal gesichert werden. Oder man verwendet die Receive-Überladung, wo man zusätzlich ein Offset in den Buffer angeben kann.

Wenn nichts dagegen spricht, schau dir die TcpClient-Klasse mal genauer an. Das ist quasi eine Highlevel-API für Sockets.

Beispiel:

Stream stream = tcpClient.GetStream();
Image im = Image.FromStream(stream);

Gruss
Pulpapex

G
Gaara-BTK Themenstarter:in
12 Beiträge seit 2005
vor 18 Jahren

Das Bild ist erstmal 35kb groß.

Ich hab eigentlich keine gr0ße Lust das Prog von normal Sockets in TCP umzuschreiben,aber bei TCPClient wird ja nur 1 Stream geschickt,ist wohl besser so...


while (clientsocket != null)
    {
        byte []buffer = new byte[36769];
        int iBytes = clientsocket.Receive(buffer);

ich dachte,das mit clientsocket != null das so lange ausgelesen wird bis der nix mehr sendet....hm....


    byteArray = new byte[ms.Length];
    count = ms.Read(byteArray, 0, 10);
    while(count < ms.Length)
    {
        byteArray[count++] = Convert.ToByte(ms.ReadByte());
     }

Hier wird ja alles ausgelesen....ABER es gibt wohl keine "einfache/schnelle" Lösung diese Daten zu einem Image zu convertieren oder?

MfG Gaara[BTK]