Я должен преобразовать BitmapImage (JPEG внутри) в байт [], а затем обратно .WPF BitmapImage - EndInit() бросали NotSupportedException
Вот мой код:
using System.IO;
using System.Windows.Media.Imaging;
public class CImageConverter
{
//
public BitmapImage ByteArray_To_BitmapImage(byte[] _binaryData)
{
BitmapImage _bitmapImage = new BitmapImage();
//
_bitmapImage.BeginInit();
_bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
_bitmapImage.StreamSource = new MemoryStream(_binaryData);
_bitmapImage.EndInit();
//
return _bitmapImage;
}
//
public byte[] BitmapImage_To_ByteArray(BitmapImage _bitmapImage)
{
byte[] bytes;
//
using(MemoryStream ms = new MemoryStream())
{
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(_bitmapImage));
encoder.Save(ms);
bytes = ms.ToArray();
}
//
return bytes;
}
}
Кажется, что BitmapImage_To_ByteArray работает должным образом.
Но ByteArray_To_BitmapImage бросали NotSupportedException в EndInit() метода.
Сообщение (перевод с веб-переводчика):
Не удалось обнаружить компонент обработки изображений, который является подходящим для завершения этой операции.
Я нашел похожие вопросы в Интернете, но ответы не работают. Обычный ответ: «Я попробовал ваш код - у меня все работает нормально».
Я также нашел this suggestion, но не понял, способ его использования.
Благодарим за помощь!
На самом деле ваш код работает. Возможно, вы каким-то образом испортили буфер, который вы передали ByteArray_To_BitmapImage. Тем не менее я предлагаю заменить BitmapImage на BitmapSource (базовый класс), чтобы сделать ваши методы более пригодными для использования. И почему это уродливое подчеркивание некоторых ваших идентификаторов? – Clemens
Сделал конверсию на месте там и обратно (почему я не подумал об этом?) - и все прошло хорошо! Вы правы, проблема в массиве байтов передачи. И уродливые символы подчеркивания - это только знаки локальных переменных :) –