GDI "Generischer Fehler" beim Speichern von Bildern in MemoryStream: Eine Lösung
Konvertieren von JPG- oder GIF -Bildern in ein MemoryStream
mit GDI aus wirken manchmal eine kryptische Ausnahme auf. Dies geschieht normalerweise während image.Save()
. Die Ursache ist oft eine vorzeitig geschlossene MemoryStream
.
Der Schlüssel besteht darin, sicherzustellen, dass der MemoryStream
während des gesamten Bildspartvorgangs offen bleibt. Das Bild wird aus dem Stream erstellt, und das Speichern erfordert fortgesetzten Zugriff.
using (var m = new MemoryStream()) { dst.Save(m, format); var img = Image.FromStream(m); // MemoryStream 'm' is closed here! img.Save("C:\test.jpg"); // This often fails. return img; }
MemoryStream
wird vor m
verwendet, was zum GDI -Fehler führt. img
using (var m = new MemoryStream()) { dst.Save(m, format); m.Seek(0, SeekOrigin.Begin); // Rewind the stream var img = Image.FromStream(m); img.Save("C:\test.jpg"); // This should now work. return img; }
können wir die Position des Streams auf den Anfang zurücksetzen, sodass m.Seek(0, SeekOrigin.Begin)
auf die gespeicherten Bilddaten zugreifen kann. Die Image.FromStream
-Anweisung sorgt für eine ordnungsgemäße Entsorgung des using
nach erfolgreicher Verarbeitung und zurückgegeben. Dies verhindert Ressourcenlecks und löst den "generischen Fehler" in GDI. MemoryStream
Das obige ist der detaillierte Inhalt vonWarum tritt beim Konvertieren von Bildern in MemoryStream „ein allgemeiner Fehler in GDI auf' auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!