Heim > Backend-Entwicklung > C++ > Warum wird beim Speichern eines JPEG in einem MemoryStream in GDI ein „allgemeiner Fehler' ausgegeben?

Warum wird beim Speichern eines JPEG in einem MemoryStream in GDI ein „allgemeiner Fehler' ausgegeben?

Linda Hamilton
Freigeben: 2025-01-26 15:26:09
Original
908 Leute haben es durchsucht

Why Does Saving a JPEG to a MemoryStream in GDI  Throw a

speichern Sie JPEG in GDI auf den Speicherfluss

Wenn GDI zum Speichern von JPEG -Bildern in Speicherfluss verwendet wird, wird es Abnormalitäten verursachen. Dieses Problem ist besonders rätselhaft, da es auf JPEG- und GIF -Bildern auftritt, es jedoch nicht auf PNG -Bildern auftritt.

Analyse der Ursache

Der Grund für diesen Fehler ist, dass der Speicherfluss beim Speichern des Bildobjekts geöffnet werden muss. Dies liegt daran, dass das Objekt mit Fluss erstellt wird und die Daten nur dann erfrischt werden, wenn der Fluss ausgeschaltet ist.

Lösung

Um dieses Problem zu lösen, stellen Sie sicher, dass der Speicherfluss offen bleibt, bevor das Bild vollständig erhalten bleibt. Das folgende Codefragment zeigt die richtige Methode:

Interpretation von Fehlerinformationen

using (var ms = new MemoryStream())
{
    using (Image image = new Bitmap(...))
    {
        ImageFormat format;
        switch (image.RawFormat) // 使用 RawFormat 代替 MimeType()
        {
            case ImageFormat.Png:
                format = ImageFormat.Png;
                break;
            case ImageFormat.Gif:
                format = ImageFormat.Gif;
                break;
            default:
                format = ImageFormat.Jpeg;
                break;
        }

        image.Save(ms, format);
        return ms.ToArray();
    }
}
Nach dem Login kopieren
Die vagen Nachrichten "GM in GDI" verwirrt viele Entwickler. Der Grund für diese Unbestimmtheit ist jedoch, dass die Anomalien nicht vom GDI selbst ausgelöst werden, sondern durch die interoperable Systemschicht verursacht werden.

Alternativ

Wenn der Speicherstrom während des Bildbeschaffungsprozesses nicht aufbewahrt werden kann, besteht eine andere Lösung darin, vor der Erhaltung einen neuen Speicherfluss aus dem ursprünglichen Speicherfluss zu erstellen:

Das obige ist der detaillierte Inhalt vonWarum wird beim Speichern eines JPEG in einem MemoryStream in GDI ein „allgemeiner Fehler' ausgegeben?. 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