Wie der Titel sagt, habe ich ein Problem mit einer Ausnahme. "System.ArgumentException". Ich bekomme es, wenn ich versuche, Byte-Array in Bitmap-Bild zu konvertieren. Hier ist der Code, wo die Ausnahme ausgelöst wird:Parameter ist nicht gültig Speicher-Stream. image.FromStream C#
Ich habe auch versucht, mit Bildwandler zu tun. Und dazu bmp = new Bitmap(ms);
verwenden Sie bmp = (Bitmap)image.FromStream(ms);
Was ist interessant, dass, wenn ich irgendwelche von denen (ob mit Speicher-Stream oder Bildkonverter) innerhalb von try Catch-Block ist. Es wird ein Bild erstellen ABER es fehlen oft einige Teile (zum Beispiel die Hälfte des Bildes ist sichtbar), aber manchmal erzeugt es ein vollständiges Bild und in der Ausgabe heißt es immer noch, dass eine Ausnahme geworfen wurde. Und eine Ausnahme wird ausgelöst. - Entschuldigung für die Grammatik. - Und ja, ich habe versucht, nach Lösung für mein Problem zu suchen, aber ich habe nichts gefunden
EDIT: Sieht aus wie ich einige Teile vergessen habe, um in Frage zu stellen, so il es hier tun. Ich mache Projekt, das Bild des Desktops an ein anderes Projekt sendet, und dafür muss er Bytes senden ... Wenn ich das File.WriteAllBytes
zum Testen in diesen ersten Beispielcode setzen würde, fügte ive hinzu, dass es fehlschlug. Aber auf der Seite, wo es gesendet wurde, funktionierte es. und dies ist der Code, der das Bild des Desktop bekommt dreht em Bytes
using (var stream = new MemoryStream())
{
bmp.Save(stream, ImageFormat.Jpeg);
Buffer = stream.ToArray();
}
Und in Stack-Trace sagt Ausnahme bei System.Drawing.Bitmap..ctor geworfen wird (Stream Stream) ..
EDIT 2: Empfangspuffer:
int ArraySize = acc.Receive(Buffer, 0, Buffer.Length, 0);
Array.Resize(ref Buffer, ArraySize);
MemoryStream ms = new MemoryStream(Buffer);
ms.Position = 0;
bmp = new Bitmap(ms);
pictureBox1.Image = bmp; //Dont mind the naming
Sendepuffer:
bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(0, 0, 0, 0, bmp.Size);
using (var stream = new MemoryStream())
{
bmp.Save(stream, ImageFormat.Jpeg);
stream.Flush();
acc.Send(stream.ToArray());
}//Dont mind the naming
Und natürlich gibt es Hintergrundverbindungen etc. zwischen Sockets.
Was ist in der Byte-Array? – adv12
Wahrscheinlich möchten Sie den Code teilen, der 'Buffer' erzeugt, das Problem stammt wahrscheinlich dort. –
Zur schnellen Überprüfung auf Korrektheit können Sie 'File.WriteAllBytes (Dateiname, ByteArray)' 'mit der entsprechenden Dateierweiterung aufrufen. Wenn die Datei beim Öffnen durcheinander gebracht wird, stimmt etwas mit dem Inhalt Ihres Byte-Arrays nicht. – JamieSee