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;
  }
Était-ce utile?

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]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top