Die Image.FromStream () -Methode gibt die Ungültige Argumentausnahme zurück

9

Ich nehme Bilder von einem intelligenten Kamera-Imager und empfange das Byte-Array von der Kamera durch Socket-Programmierung (.NET-Anwendung ist der Client, Kamera ist der Server).

Das Problem ist, dass ich die System.InvalidArgument-Ausnahme zur Laufzeit bekomme.

%Vor%

Ich habe dieses Problem in vielen Foren gesucht und die Vorschläge von vielen Experten versucht, aber nichts half.

Ich glaube nicht, dass es ein Problem mit dem Byte-Array als solches gibt, denn wenn ich dasselbe Byte-Array in meine VC ++ MFC-Client-Anwendung füttere, bekomme ich das Bild. Aber das funktioniert irgendwie nicht in C # .NET.

Kann mir jemand helfen?

P.S:

Andere Methoden, die ich versucht habe, um die gleiche Aufgabe zu erfüllen, sind:

1.

%Vor%

2.

%Vor%

Keine der oben genannten Methoden hat funktioniert. Bitte helfen.

    
Xaruth 24.03.2009, 03:28
quelle

9 Antworten

7

Image.FromStream() erwartet einen Stream, der NUR ein Bild enthält!

Er setzt die stream.Position auf 0. Ich habe einen Stream, der mehrere Bilder oder anderes Zeug enthält, Sie müssen Ihre Bilddaten in ein Byte-Array lesen und einen MemoryStream initialisieren damit:

Image.FromStream(new MemoryStream(myImageByteArray));

Der MemoryStream muss so lange geöffnet bleiben, wie das Bild verwendet wird.

Ich habe das auch auf die harte Tour gelernt. :)

    
supernorbert 09.10.2013 10:02
quelle
4

Vielleicht ist das Bild in ein OLE-Feld eingebettet und Sie müssen den 88-Byte-OLE-Header plus Payload in Betracht ziehen:

%Vor%     
Jose Martin 02.02.2010 15:47
quelle
3

Ich vermute, dass etwas schief geht, wenn die Datei vom Server empfangen wird. Vielleicht erhalten Sie nur einen Teil der Datei, bevor Sie versuchen, sie in ein Image zu konvertieren? Sind Sie sicher es ist genau das gleiche Byte-Array, das Sie der C ++ - Anwendung zuführen?

Versuchen Sie, den Stream in einer Datei zu speichern und zu sehen, was Sie erhalten. Sie könnten dort einige Hinweise entdecken.

Sie können auch einen Haltepunkt hinzufügen und manuell einige der Bytes im Byte-Array mit dem vergleichen, was sie sein sollen (wenn Sie das wissen).

Edit: Es sieht so aus, als wäre nichts falsch mit dem Empfang der Daten. Das Problem ist, dass es im Rohformat ist (kein Format, das Image.FromStream versteht). Der Bitmap(Int32, Int32, Int32, PixelFormat, IntPtr) -Konstruktor kann hier nützlich sein. Oder Sie können die leere Bitmap erstellen und sie manuell aus den Rohdaten erstellen.

    
lc. 24.03.2009 03:55
quelle
3

Ich hatte dieses Problem dabei:

%Vor%

Mit den letzten 2 Zeilen ist das Problem. Ich habe es damit behoben:

%Vor%

Und dann hat das funktioniert:

%Vor%     
NotDan 27.10.2009 21:59
quelle
1

System.InvalidArgument bedeutet, dass der Stream kein gültiges Bildformat hat, d. h. einen Bildtyp, der nicht unterstützt wird.

    
Mitch Wheat 24.03.2009 03:47
quelle
1

Versuchen Sie Folgendes:

%Vor%

Ich hoffe, es hilft!

    
Sathiyamoorthi S 05.05.2017 06:21
quelle
0

Ich hatte das gleiche Problem in der Vergangenheit und es wurde von einem Leck innerhalb der Windows-GDI-Bibliotheken verursacht, was Bitmap verwendet. Wenn dies die ganze Zeit für dich passiert, dann ist es wahrscheinlich nicht verwandt.

    
Chris 24.03.2009 03:53
quelle
0

Dieser Code funktioniert

%Vor%     
Mohd Aamir Ansari 07.12.2015 17:37
quelle
0

Versuchen Sie, etwas ähnliches wie hier beschrieben zu verwenden. Ссылка

%Vor%     
Andrey Belykh 05.01.2018 17:56
quelle