Une erreur générique s'est produite dans GDI+.

Résolu
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 1 sept. 2006 à 08:45
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 1 sept. 2006 à 21:40
Bonjour,

Je poste ce message car j'ai un petit problème

je souhaite inclure des images dans un fichier XML
j'ai donc découvert ce code:
    Public Function Base64ToImage(ByVal str As String) As System.Drawing.Image
        Dim ms As New System.IO.MemoryStream(Convert.FromBase64String(str))
        Dim image As System.Drawing.Bitmap = CType(System.Drawing.Bitmap.FromStream(ms), Bitmap)
        'image.MakeTransparent()
        ms.Close()
        Return image        ms Nothing : image Nothing
    End Function

    Public Function ImageToBase64(ByRef img As System.Drawing.Image) As String
        Dim ms As New System.IO.MemoryStream
        img.Save(ms, Imaging.ImageFormat.Jpeg)
        Return Convert.ToBase64String(ms.ToArray)
        ms.Close()
    End Function

Ce code fonctionne, il charge correctement mais au niveau de la sauvegarde il fait des sienne.
Quand on sauvegarde une image d'une picturebox, nikel il fonctionne correctement MAIS la ou ca va pas c'est quand l'image provient de la fonction Base64ToImage, celle qui charge.

L'erreur est sur:
img.Save(ms, Imaging.ImageFormat.Jpeg)
et résumé d'un simplicité extreme:
Une erreur générique s'est produite dans GDI+.

(si je me souvien bien, GDI+ est ce qui gere la classe System.Drawing dont .save)

j'ai fais l'essai tout simple: 4 bouton, 1 picturebox
le premier charge une image d'un fichier sur le disque dur et la met dans la picturebox
le 2eme charge l'image d'un string (une image sous forme de chaine de caractere en base 64)
le 3eme sauvegarde l'image de la picturebox sous forme de string
la 4eme sauvegarde l'image de la picturebox sous forme de fichier

1 + 3 => fonctionne
1 + 4 => fonctionne
2 + 3 => erreur
2 + 4 => erreur

sachant que le bouton 4 contient uniquement img.Save("c:\image.jpg") on ne peut plus faire img.save quand img provient de la fonction Base64ToImage (c'est ma conclusion)

la question est simple, (la reponse surement moins), Comment corriger ce bug ?

(perso je voit pas d'erreur, pour moi un objet image est le meme, on s'en fous de sa provenance)

Merci de m'aider !


L U C Y I3 E R @ D

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
1 sept. 2006 à 13:25
Je vais certainement dire une grosse connerie (je ne maitrise pas du tout ce dont tu parle, j'ai même un peu de mal à suivre), mais d'un coté, dans ImageToBase64, tu convertie une image Jpeg en string Base64.

De l'autre, dans Base64ToImage, tu convertie une string Base64 en image semble-t-il au format Bitmap.

Pour moi, dans le cas ou tu utilise tes fonctions pour d'abords convertir une image Jpeg en chaine, puis pour reconvertir cette chaine en image, c'est une image au format Jpeg (l'image de départ) que tu devrais récupérer, je pense. Et si tu interprete cette image comme étant du Bitmap, je comprend qu'elle soit mal interpretée.

Ou alors tes méthodes de System.Drawing sont capable de détecter le format de l'image, et de la convertir au format demandé.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
3
Rejoignez-nous