Maison > développement back-end > C++ > Pourquoi 'une erreur générique s'est-elle produite dans GDI' se produit lors de la conversion d'images en mémoire?

Pourquoi 'une erreur générique s'est-elle produite dans GDI' se produit lors de la conversion d'images en mémoire?

Barbara Streisand
Libérer: 2025-01-26 15:16:12
original
814 Les gens l'ont consulté

Why Does

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>
Copier après la connexion

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>
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal