IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C# 2.0] Comment sauver une image dans un fichier Xml ?


Sujet :

C#

  1. #1
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut [C# 2.0] Comment sauver une image dans un fichier Xml ?
    Bonjour,

    je galère quelque peu pour stocker et récupérer des images dans un fichier XML.
    J'ai une application qui proposera de choisir une image qui apparaitra dans une pictureBox. L'image de cette picturebox devra être sauvée dans un fichier XML, ce qui implique sauf erreur de ma part
    Image > Byte[] > string > XML

    et la seconde application
    XML > string > byte[] > Image > PictureBox

    ca semble tellement simple à faire :-)
    mais ca ne marche pas. Pour le moment, je me contente de faire ceci
    byte[] > string > byte[]

    et bien, je retrouve pas le byte[] de départ et plus tard, lorsque je crée une image depuis un memorystream prenant le tableau de bytes en parametres, j'ai une exception 'invalid argument' sans aucun detail.

    voici ce que j'ai pour mon test conversion bidirectionnel byte <> string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    private void button1_Click(object sender, EventArgs e)
            {
                byte[] ooo = convertPicBoxImageToByte(pictureBox1);
                string img = System.Text.Encoding.ASCII.GetString(ooo);
                byte[] bbb = StrToByteArray(img);
            }
     
    private byte[] convertPicBoxImageToByte(System.Windows.Forms.PictureBox pbImage)
            {
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                pbImage.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                return ms.ToArray();
            }
     
            public static byte[] StrToByteArray(string str)
            {
                System.Text.a
     encoding = new System.Text.ASCIIEncoding();
                return encoding.GetBytes(str);
            }
    je n'arrive déjà pas à avoir ooo == bbb. avec le débuggueur, je vois bien que chaque élément est différent

    képassa? existe-t-il une autre solution car j'ai beau jouer avec les encodages, rien n'y fait


    ---- seconde chose:
    si je fais
    Image => byte[] => Image
    le canal alpha n'est pas préservé :-( A plus de transparence ou d'opacité. comment faire?

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Citation Envoyé par pharaonix
    ---- seconde chose:
    si je fais
    Image => byte[] => Image
    le canal alpha n'est pas préservé :-( A plus de transparence ou d'opacité. comment faire?
    bon ca je viens de trouver. faut que je sauvegarde en PNG. mais que ce passe-t-il si j'ai un GIF et que je veux encoder en gif. comment fais-t-on pour avoir le format d'une image? j'ai la propriété PixelFormat mais pas format

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 122
    Points : 124
    Points
    124
    Par défaut
    Peut etre que tu peux utiliser

    System.Drawing.Imaging.ImageFormat

    Et pour convertir, tu peux peut etre utiliser System.Drawing.Image et y'a une méthode Save qui utilise un MemoryStream...

    hope this help!

    edit: Ya RawFormat aussi...

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Et en sauvegardant ton image dans un répertoire temporaire sur disque, en ouvrant son stream et faisant une lecture binaire ?

    Sinon le passage byte > string à mon avis tu vas en baver...

    D'autant qu'en XML, tous les caractères ne sont pas autorisés (genre les caractères qui ouvrent et femrent les balises ), mais heureusement il existe un XmlEncode/XmlDecode pour le résoudre.

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    merci.
    en fait, j'ai besoin dans un fichier XML, de stocké des "objets"
    cela contient son nom, son prix, son image. En realité, le fichier XML sera une ressource incorporée dans une assembly qui sera téléchargée et chargée par le logiciel tiers. Je dois donc tout faire que tout rentre dans un seul fichier, et l'xml me semble le plus adapté.

    @joujou, si tu regardes j'utilise dejà ta méthode et ca me ressort mon tableau de byte et si je le reconverti direct en image c'est parfait. par contre quand je le passe en string, j'ai pas de "perte" a proprement parler, mais les byte changent de valeur. pourtant, je vois pas comment écrire directement le tableau de byte.

    j'ai ptete un debut avec la méthode WriteBase64
    testons testons



    edit: yippykahayyyyyyyy
    Bon bah en fait vos réponses m'ont aidé. Il ne faut surtout pas passé par l'objet String mais écrire directement le tableau de bits. cela se fait avec
    WriteBase64(byte []) et ReadBase64 dans l'autre sens. je vais essayer de poster un code propre quand j'aurais vérifié que ca marche pleinement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment charger une image dans un fichier Excel?
    Par google_is_my_friend dans le forum Excel
    Réponses: 4
    Dernier message: 14/03/2012, 18h25
  2. extraire source d'une image dans un fichier XML
    Par zied87 dans le forum Windows Phone
    Réponses: 5
    Dernier message: 17/08/2011, 12h29
  3. Réponses: 3
    Dernier message: 18/04/2008, 10h54
  4. Réponses: 5
    Dernier message: 12/02/2008, 17h15
  5. Enregistrer une image dans un fichier XML
    Par MiJack dans le forum Delphi
    Réponses: 12
    Dernier message: 24/05/2006, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo