2016-07-11 18 views
0

Ich arbeite an einem Projekt, wo ich ein Bild verarbeiten muss, das ich von einem Socket empfange und es anzuzeigen.C# Wie Bild in MemoryStream gespeichert wird

Ich bekomme das Bild in jpeg Format, und ich kann nicht nur die Image.FromStream()); Methode zum Abrufen des Bildes verwenden, weil es mehr Daten enthält und ich möchte es verarbeiten, während ich die Daten lese - aus Gründen der Effizienz. (Grundsätzlich möchte ich das Bild manuell aus dem Stream lesen). Gibt es eine Quelle, die erklärt, wie diese Bilder in der MemoryStream gespeichert werden?

Die MemoryStream ist auf einen byte [] Puffer gebaut, ich benutze den gleichen Puffer auch neu und ich erstelle keinen neuen MemoryStream jedes Mal, wenn die Methode aufgerufen wird. Eine Probe von Code:

private byte[] BlockToJpeg() 
    {  
     Bitmap block=new Bitmap("..."); 
     MemoryStream ms=new MemoryStream(); 
     block.Save(ms, ImageFormat.Jpeg); 
     return ms.GetBuffer(); 
    } 

So der Aufruf wie dieser

byte[] buffer=BlockToJpeg(); 
    sck.Send(buffer);//sending the buffer...not the full code because this is not our problem. 

Jetzt in der Reciver Seite aussehen würde, wenn ich diesen Puffer erhalten werden:

Byte[] RecieveBuffer=sck.Recieve();//again,kind of pseudo code,because this is not the relevant part. 

ich muss seine Pixel verarbeiten, also werde ich es vorziehen, sie einzeln aus dem byte[] array manuell zu lesen ... Gibt es irgendwelche Struktur zum Lesen dieses (in unserem Fall - Lesen eines JPEG-Bildes als Byte-Array gespeichert)? Zum Beispiel - zuerst 4 Bytes sind Breite, Sekunde sind Höhe ... 3. PixelFormat und der Rest sind die Pixelwerte ... oder etwas ...?

Danke.

+0

Bilder werden nicht in MemoryStreams gespeichert, es sei denn, Sie legen sie dort. Sie müssen fragen, wer den MemoryStream füllt, wie er die Daten formatiert hat. Die Daten selbst sind nur eine Repräsentation der Datei, sie ist genau so angeordnet, wie sie ausgelegt ist, wenn Sie die Datei auf der Festplatte haben. –

+0

@ScottChamberlain in Ordnung .. ich fügte ein kurzes Beispiel von Code in der Frage zu machen ist einfacher zu verstehen .. – Slashy

+0

In Ihrem Update macht BlockToJpeg nicht viel Sinn, was versuchst du dort zu tun? Versuchen Sie einfach, die Dateigröße herauszufinden, wenn Sie ein PNG in ein JPEG umgewandelt haben? (Auch sollten Sie wirklich alle von Ihnen erstellten "Bitmap" - oder "Image" -Objekte entsorgen) –

Antwort

Verwandte Themen