erreur dans mon octet [] à la conversion WPF BitmapImage?
-
28-09-2019 - |
Question
Je l'enregistrement d'une BitmapImage à un octet [] pour l'enregistrement dans un DB. Je suis sûr que les données sont sauvegardées et extraites avec précision il est donc pas un problème là.
Sur mon octet [] à la conversion BitmapImage Je continue à obtenir une exception de « System.NotSupportedException. Non pour terminer cette opération appropriée composante d'imagerie a été trouvé »
Quelqu'un peut-il voir ce que je fais mal avec mes deux fonctions ici?
private Byte[] convertBitmapImageToBytestream(BitmapImage bi)
{
int height = bi.PixelHeight;
int width = bi.PixelWidth;
int stride = width * ((bi.Format.BitsPerPixel + 7) / 8);
Byte[] bits = new Byte[height * stride];
bi.CopyPixels(bits, stride, 0);
return bits;
}
public BitmapImage convertByteToBitmapImage(Byte[] bytes)
{
MemoryStream stream = new MemoryStream(bytes);
stream.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = stream;
bi.EndInit();
return bi;
}
La solution 3
Il se trouve que les CopyPixels BitmapImage n'est pas juste. Je prends la sortie du BitmapImage et le convertir en quelque chose utilisable dans ce cas un jpg.
public static Byte[] convertBitmapImageToBytestream(BitmapImage bi)
{
MemoryStream memStream = new MemoryStream();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bi));
encoder.Save(memStream);
byte[] bytestream = memStream.GetBuffer();
return bytestream;
}
Autres conseils
Est-ce que cette question StackOverflow aide?
byte [] pour BitmapImage dans silverlight
EDIT:
Essayez ceci, pas sûr que cela fonctionnera:
public BitmapImage convertByteToBitmapImage(Byte[] bytes)
{
MemoryStream stream = new MemoryStream(bytes);
stream.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.DecodePixelWidth = ??; // Width of the image
bi.StreamSource = stream;
bi.EndInit();
return bi;
}
Mise à jour 2:
Je les ai trouvées:
charger un byte [] dans une image lors de l'exécution
BitmapImage de byte [] sur un non UIThread
En dehors de cela, je ne sais pas.
Comment savez-vous que le format octet [] que vous créez est ce que le BI attend dans le flux? Pourquoi ne pas utiliser le BitmapImage.StreamSource pour créer l'octet [] que vous enregistrez? Ensuite, vous savez que le format sera compatible.
http://www.codeproject.com/KB/vb/BmpImage2ByteArray.aspx
http: / /social.msdn.microsoft.com/forums/en-US/wpf/thread/8327dd31-2db1-4daa-a81c-aff60b63fee6/
[Je n'avons pas essayé de ce code, mais vous pouvez]