Erreur de conversion GDI JPEG en MemoryStream : un piège courant
Cet article traite d'une "erreur GDI générique" fréquente rencontrée lors de l'enregistrement d'images JPEG sur un MemoryStream
à l'aide de GDI . Bien que les fichiers PNG puissent fonctionner parfaitement, les fichiers JPEG déclenchent souvent cette exception.
Le problème : L'erreur, une "erreur GDI générique" frustrante, se produit lors de l'opération de sauvegarde JPEG sur un MemoryStream
.
La cause profonde : Le problème réside dans la gestion du cycle de vie du MemoryStream
. Le flux doit rester ouvert pendant tout le traitement de l'image, y compris l'Save
opération.
La solution : La clé est de maintenir l'état ouvert du MemoryStream
. Voici l'extrait de code corrigé :
using (var m = new MemoryStream()) { dst.Save(m, format); // Save to MemoryStream // Create a new Image from the MemoryStream (optional, depending on your needs) using (var img = Image.FromStream(m)) { img.Save("C:\test.jpg"); // Save to file (optional) var bytes = PhotoEditor.ConvertImageToByteArray(img); //Convert to byte array (optional) return img; // Return the Image object } }
En gardant le MemoryStream
ouvert dans le bloc using
jusqu'à ce que l'objet Image
ne soit plus nécessaire, les ressources nécessaires restent accessibles, évitant ainsi l'erreur.
Explication : La raison précise n'est pas claire, mais il est probable que l'objet Image
conserve une référence interne à l'original MemoryStream
. La fermeture prématurée du flux invalide cette référence, entraînant l'erreur GDI lors de l'opération Save
.
Considérations importantes :
MemoryStream
reste ouvert jusqu'à ce que toutes les manipulations d'image soient terminées.Image
à partir de flux (par exemple, ResizingFirstOrDefault
), envisagez d'abord de les enregistrer dans un fichier temporaire ou un autre flux, puis de créer un nouvel objet Image
à partir des données enregistrées.Cette approche garantit une gestion fiable des fichiers JPEG au sein de vos applications 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!