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 :

Conversion d'image en Byte[]


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Par défaut Conversion d'image en Byte[]
    Bonjour !!

    C'est pas vraiment un problème, mais j'ai plutôt besoin d'avis d'experts.

    Ce serait trop long expliquer en quoi consiste mon programme, donc je vais vous faire une petite mise en situation bidon.

    Je télécharge un favicon d'internet en le sauvegardant dans un fichier .ico. Ensuite je charge ce fichier pour retourner un BitmapImage à l'aide de cette fonction:

    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
    21
    22
    public static BitmapImage IconFileToBitmap(string path)
            {
                Stream iconStream = new FileStream(path, FileMode.Open, FileAccess.Read);
                IconBitmapDecoder decoder = new IconBitmapDecoder(iconStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                MemoryStream memStream = new MemoryStream();
                BitmapImage img = new BitmapImage();
     
                encoder.Frames.Add(BitmapFrame.Create(decoder.Frames[0]));
                encoder.Save(memStream);
     
                img.BeginInit();
                img.StreamSource = new MemoryStream(memStream.ToArray());
                img.EndInit();
     
                memStream.Close();
                iconStream.Close();
     
                File.Delete(path);
     
                return img;
            }
    Je sauvegarde cette image dans un objet dont je sérialise. Alors je converti mon image en Byte[] à l'aide de cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static Byte[] BitmapImageToByteStream(BitmapImage img)
            {
                MemoryStream stream = new MemoryStream();
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(img));
                encoder.Save(stream);
                byte[] bytestream = stream.GetBuffer();
     
                stream.Close();
     
                return bytestream;
            }
    Et lorsque je désérialise mon objet, je converti mon image en Byte[] vers une BitmapImage à l'aide de cette dernière fonction:

    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
    21
    public static BitmapImage ByteToBitmapImage(byte[] bytes)
            {
                MemoryStream stream = new MemoryStream(bytes);
                PngBitmapDecoder decoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.None);
                PngBitmapEncoder encoder = new PngBitmapEncoder();
                BitmapImage img = new BitmapImage();
     
                MemoryStream tempStream = new MemoryStream();
     
                encoder.Frames.Add(BitmapFrame.Create(decoder.Frames[0]));
                encoder.Save(tempStream);
     
                img.BeginInit();
                img.StreamSource = new MemoryStream(tempStream.ToArray());
                img.EndInit();
     
                stream.Close();
                tempStream.Close();
     
                return img;
            }
    Ce code vient de plusieurs forums que j'ai trouver sur le web dont j'ai adapté à mes besoin, cependant je me demandais s'il y avait du code inutile. Comme exemple, est-ce vraiment nécessaire de Décoder une Byte[] pour ensuite la réencoder?

    Je cherche plutôt à avoir l'avis de vous pour savoir si je me suis pris de la bonne manière.

    Merci!!!

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    dépendant de ton usage exact et d'autres éléments (taille image, peu de modification de l'image,etc...) tu pourrais peut-être la sauver en tant qu'image normale une fois et ne mettre que le chemin dans ton objet. Comme ça tu ne dois pas la sérialisé à chaque fois.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/02/2014, 16h25
  2. Conversion Image en Bytes sous WPF
    Par Hlama dans le forum C#
    Réponses: 3
    Dernier message: 21/10/2012, 15h21
  3. Réponses: 5
    Dernier message: 06/07/2011, 09h17
  4. [Image]Conversion Image en byte[] ou BufferedImage en byte[]
    Par ¤ Actarus ¤ dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 11/12/2005, 22h46
  5. Conversion avi->image
    Par lio_on_jb_groove dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 10h11

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