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:
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:
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:
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!!!