C# - bitmap-Bilder, byte-arrays und Datenströme!
Ich habe eine Funktion, die extrahiert eine Datei in ein byte-array (data).
int contentLength = postedFile.ContentLength;
byte[] data = new byte[contentLength];
postedFile.InputStream.Read(data, 0, contentLength);
Später ich dieses byte array zu konstruieren, ein System.Zeichnung.Bild-Objekt
(wo Daten ist das byte-array)
MemoryStream ms = new MemoryStream(data);
Image bitmap = Image.FromStream(ms);
Bekomme ich die folgende exception "ArgumentException: der Parameter ist nicht gültig."
Den original geposteten Datei enthaltenen 500k jpeg-Bild...
Irgendwelche Ideen, warum dies nicht funktioniert?
Hinweis: ich versichere Ihnen, ich habe einen gültigen Grund für die Umwandlung in ein ByteArray und dann in ein memorystream!!
Die Daten enthalten lediglich die Bild-Daten? Sie sagen nicht, welche Art
Wo sind Sie immer diese Fehlermeldung? Der code, den Sie geschrieben, sollte aber funktionieren...
postedFile ist ein HttpPostedFileBase. Der Fehler tritt bei der Zeile bitmap-Bild = Bild.FromStream(ms); 🙁
postedFile
ist.Wo sind Sie immer diese Fehlermeldung? Der code, den Sie geschrieben, sollte aber funktionieren...
postedFile ist ein HttpPostedFileBase. Der Fehler tritt bei der Zeile bitmap-Bild = Bild.FromStream(ms); 🙁
InformationsquelleAutor iasksillyquestions | 2009-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist wahrscheinlich, weil Sie nicht das bekommen alle die Daten der Datei in das byte-array. Die Read-Methode nicht zurück, wie viele bytes, wie Sie verlangen, und es gibt die Anzahl der bytes, die tatsächlich in das array. Sie haben zu Durchlaufen, bis Sie bekommen haben alle Daten:
Dies ist ein häufiger Fehler beim Lesen aus einem stream. Ich habe gesehen, dass dieses problem viele Male.
Edit:
Mit dem Scheck für ein vorzeitiges Ende des Streams, als Matthew vorgeschlagen, würde der code sein:
Sie sollten auch prüfen, ob eine 0 zurückgeben, falls Sie Treffer Ende stream früh.
Nicht 0 ein Gültiger Wert?
Sie haben eine extra p++ in der for-Anweisung, die sollten nicht da sein. Das wird ein byte Lücke zwischen den Blöcken von Daten, die Sie Lesen.
Hatte einen Gedanken.... In einer früheren Funktion habe ich gelesen, die header-Informationen aus dem stream. Dies geschieht, um 4 bytes (ich überprüfe für ein jpg). Die Menge der Daten aus dem stream gelesen und weitergeleitet, um die Datei fehlt 4 bytes!!! DUMM DUMM DUMM!!
InformationsquelleAutor Guffa
Du bist nicht die überprüfung der Rückgabewert von postedFile.InputStream.Lesen. Es ist nicht überhaupt garantiert zum füllen des Arrays auf das erste Gespräch. Verlassen, dass eine beschädigte JPEG-Daten (0 statt des Datei-Inhalts).
InformationsquelleAutor Matthew Flaschen
Haben Sie überprüft den Rückgabewert der Read () - Aufruf, um zu überprüfen, dass tatsächlich das Lesen der Inhalte? Vielleicht Lesen Sie() ist nur die Rückkehr eines Teils des Stroms, sodass Sie den loop-die Read () - Aufruf, bis alle bytes verbraucht werden.
InformationsquelleAutor Kevin Pullin
Irgendeinen Grund, warum Sie nicht einfach dies tun:
InformationsquelleAutor jrista
Hatte ich Probleme beim laden von Bildern .NET wurden, öffnen kann, mehr robuste Bild-Bibliotheken. Es ist möglich, dass die spezifischen jpeg-Bild, das Sie haben, ist nicht unterstützt .NET. jpeg-Dateien sind nicht nur eine Art der Kodierung, es gibt eine Vielzahl von möglichen Kompressionsverfahren erlaubt.
Könnten Sie versuchen, es mit einem anderen Bild, dass Sie wissen, ist in einem unterstützten format.
InformationsquelleAutor Eclipse