Heim >Backend-Entwicklung >C++ >Warum wird beim Speichern eines JPEG in einem MemoryStream in GDI ein „allgemeiner Fehler' ausgegeben?
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
<code class="language-csharp">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(); } }</code>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!