Un générique erreur s'est produite dans GDI+ au Système.De dessin.Image.Enregistrer
Exception:
Un générique erreur s'est produite dans GDI+.
au Système.De dessin.Image.Enregistrer(String filename, ImageCodecInfo codeur, EncoderParameters encoderParams)
au Système.De dessin.Image.Enregistrer(String filename, ImageFormat format)
au Système.De dessin.Image.Enregistrer(String filename)
Code:
byte[] bitmapData = new byte[imageText.Length];
MemoryStream streamBitmap;
bitmapData = Convert.FromBase64String(imageText);
streamBitmap = new MemoryStream(bitmapData);
System.Drawing.Image img = Image.FromStream(streamBitmap);
img.Save(path);
Nous convertir une chaîne base64 dans un MemoryStream, puis de créer un Système.De dessin.Image (L'Image.FromStream(streamBitmap)).
À la fin l'image est enregistrée dans un fichier temp.
La chose étrange est que le problème semble se produire lorsque l'activité (nombre d'utilisateurs simultanés) est élevé sur le serveur web et le problème est résolu temporairement après un IISRESET ou un pool d'applications recycler...
==> Garbage collector problème ?
J'ai déjà vérifié la permission de le dossier TEMP...
OriginalL'auteur Razor | 2014-03-28
Vous devez vous connecter pour publier un commentaire.
Lorsque vous chargez une imagefrom un Ruisseau, Vous devez tenir les flux ouvert pour la durée de vie de l'image, voir Image MSDN.FromStream.
Je pense que l'exception du fait que le flux de mémoire se ferme avant même que l'image devient éliminés. Vous pouvez modifier votre code comme ceci
Voici quelques liens vers des discussions des problèmes similaires
gdi+ erreur lors de l'enregistrement de l'image de la page web
Lors de l'élaboration d'une image Système.Moment de l'exécution.InteropServices.Exception externe: Un générique erreur s'est produite dans GDI
En ajoutant ce commentaire parce que quelqu'un a supprimé mon complémentaires de réponse qui est liée à ce accepté de répondre. Si vous voyez que le GDI erreur est levée après un certain temps, voici comment faire pour vérifier que c'est une fuite mémoire GDI qui est à l'origine de l'exception. Après que le programme a une fuite de 10 000 poignées de Windows ne lui donnera pas plus. Vous pouvez diagnostiquer ce genre de fuites avec TaskMgr.exe Cliquez sur l'onglet Processus, cliquez-Droit sur les colonnes et Sélectionnez les Colonnes à ajouter des colonnes pour les Objets GDI. Si les Objets GDI est celui qui est en constante augmentation - alors vous avez un RIB fuite de mémoire.
OriginalL'auteur Suresh Kumar Veluswamy
Assurez-vous que le chemin d'accès spécifié est valide. À l'aide de la question précédente (avec l'usage sur les flux de mémoire) vous pouvez toujours obtenir exactement le message d'erreur "Erreur Générique dans GDI+" si le chemin d'accès au fichier n'existe pas. Le fichier sera créé, le chemin d'accès au répertoire doit exister.
OriginalL'auteur mminneman
J'ai rencontré le même message d'exception lors de l'enregistrement d'une image. Il s'est avéré que mon code était très bien et fait ce qu'il était censé faire.
Le problème est que le disque dur était plein, donc la nouvelle image ne pouvait pas être créé. J'ai seulement remarqué cela lorsque vous essayez d'enregistrer le projet sur lequel je travaillais, comme il n'avait pas d'espace pour enregistrer.
Pour moi aussi la question de l'autorisation du dossier sur le serveur merci...
OriginalL'auteur Molay
Dans mon cas, l'extrait de code ci-Dessous fonctionne très bien où ConvertedImageString est Base64Image chaîne de caractères reçue à partir de l'API et je les convertir en image avec le format et le sauver de la physique du dossier de fichier sur le Serveur.
Edit: L'erreur ci-dessus se produit peut-être à cause du mauvais chemin d'accès au fichier sur lequel vous essayez d'Enregistrer l'image
Dans le code ci-Dessus, je prend l'image que
BASE64ConvertedString
d'une image et Stocké dans le Répertoire IIS Ou le site web de Répertoire avec " Joint Photographic Experts Group Format. C'est tout.Mettez ceci dans votre réponse!
OriginalL'auteur Prashant Pimpale