GDI "Erreur générique" lors de l'enregistrement d'images sur MemoryStream : une solution
La conversion d'images JPG ou GIF en MemoryStream
à l'aide de GDI génère parfois une exception énigmatique "Une erreur générique s'est produite dans GDI". Cela se produit généralement pendant image.Save()
. La cause première est souvent un MemoryStream
fermé prématurément.
La clé est de garantir que le MemoryStream
reste ouvert tout au long du processus d'enregistrement de l'image. L'image est créée à partir du flux et l'enregistrement nécessite un accès continu.
Considérez cet extrait de code problématique :
<code class="language-csharp">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; }</code>
Le MemoryStream
m
est éliminé avant que img
ne soit utilisé, ce qui entraîne l'erreur GDI.
La solution est simple : laissez le flux ouvert jusqu'à ce que l'image soit entièrement traitée. Voici le code corrigé :
<code class="language-csharp">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; }</code>
En utilisant m.Seek(0, SeekOrigin.Begin)
, nous réinitialisons la position du flux au début, permettant à Image.FromStream
d'accéder aux données d'image enregistrées. La déclaration using
garantit l'élimination appropriée du MemoryStream
une fois que l'image a été traitée et renvoyée avec succès. Cela évite les fuites de ressources et résout "l'erreur générique" dans GDI.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!