ошибка в моем преобразовании байта [] в WPF BitmapImage? - PullRequest
3 голосов
/ 08 октября 2010

Я сохраняю BitmapImage в байте [] для сохранения в БД. Я уверен, что данные сохраняются и извлекаются точно, так что это не проблема.

В моем преобразовании байта [] в BitmapImage я получаю исключение «System.NotSupportedException: не найден ни один компонент обработки изображений, подходящий для выполнения этой операции».

Кто-нибудь может увидеть, что я делаю не так с моими двумя функциями здесь?

  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;
  }

Ответы [ 3 ]

0 голосов
/ 08 октября 2010

Откуда вы знаете, что создаваемый вами формат байта [] - это то, что BI ожидает в потоке?Почему бы вам не использовать BitmapImage.StreamSource для создания байта [], который вы сохраняете?Тогда вы знаете, что формат будет совместимым.

http://www.codeproject.com/KB/vb/BmpImage2ByteArray.aspx

http://social.msdn.microsoft.com/forums/en-US/wpf/thread/8327dd31-2db1-4daa-a81c-aff60b63fee6/

[Я не пробовал ни один из этого кода, новы можете]

0 голосов
/ 09 октября 2010

Оказывается, битовый образ CopyPixels не прав.Я беру вывод bitmapimage и преобразовываю его во что-то пригодное для использования в этом случае 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;
  }
0 голосов
/ 08 октября 2010

Помогает ли этот вопрос StackOverflow?

byte [] для BitmapImage в silverlight

EDIT:

Попробуйте, не уверен, что он будет работать:

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;
}

ОБНОВЛЕНИЕ 2:

Я нашел это:

Загрузка байта [] в изображение во время выполнения

BitmapImage из байта [] на не UIThread

Кроме этого, я не знаю.

...