Heim > Backend-Entwicklung > C++ > Warum tritt beim Konvertieren von Bildern in MemoryStream „ein allgemeiner Fehler in GDI auf' auf?

Warum tritt beim Konvertieren von Bildern in MemoryStream „ein allgemeiner Fehler in GDI auf' auf?

Barbara Streisand
Freigeben: 2025-01-26 15:16:12
Original
853 Leute haben es durchsucht

Why Does

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.

Betrachten Sie diesen problematischen Code -Snippet:

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;
}
Nach dem Login kopieren
Die

MemoryStream wird vor m verwendet, was zum GDI -Fehler führt. img

Die Lösung ist einfach: Halten Sie den Stream offen, bis das Bild vollständig verarbeitet ist. Hier ist der korrigierte Code:

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;
}
Nach dem Login kopieren
Mithilfe

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage