Ошибка при декодировании BitmapImage

412
04 ноября 2017, 11:51

Кодирую BitmapImage (в формате gif) в массив байт, далее передаю этот массив байт по сети, массивы байтов при отправке и пришествию совпадают, далее пытаюсь декодировать и вылетает ошибка: System.NotSupportedException: "Не удалось обнаружить компонент обработки изображений, который подходит для завершения данной операции."

   class EncoderImage
    {
        public static byte[] Encode(BitmapImage image, FormatImagescs format)
        {
            byte[] data;
            BitmapEncoder encoder = new GifBitmapEncoder();
            switch (format)
            {
                case FormatImagescs.JPG:
                    encoder = new JpegBitmapEncoder();
                    break;
                case FormatImagescs.BMP:
                    encoder = new BmpBitmapEncoder();
                    break;
            }
            encoder.Frames.Add(BitmapFrame.Create(image));
            using (MemoryStream ms = new MemoryStream())
            {
                encoder.Save(ms);
                data = ms.ToArray();
            }
            return data;
        }
        public static BitmapSource Decode(byte[] data, int dataLengt)
        {
            var result = GetResult(data, dataLengt);
            //using (var ms = new MemoryStream(data))
            //{
            //    var image = new BitmapImage();
            //    image.BeginInit();
            //    image.CacheOption = BitmapCacheOption.OnLoad; // here
            //    image.StreamSource = ms;
            //    image.EndInit();
            //    return image;
            //}
            BitmapSource image; ;
            using (var ms = new MemoryStream(result))
            {
                //var dec = BitmapFrame.Create(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                GifBitmapDecoder decoder = new GifBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                image = decoder.Frames[0];
            }
            return image;
        }
        public static byte[] GetResult(byte[] data, int dataLengt)
        {
            byte[] dataR = new byte[dataLengt];
            for (int i = 0; i < dataLengt; i++)
            {
                dataR[i] = data[i];
            }
            return dataR;
        }
READ ALSO
Залочить форму на время работы события

Залочить форму на время работы события

Есть на форме кнопка сохранитьКогда я её нажимаю, есть необходимость залочить форму, и запустить например колесо прокрутки с текстом на подобии...

230
Как добавить индекс при Entity Model First?

Как добавить индекс при Entity Model First?

Как добавить индекс по 2м столбцам в Модель таблицы базы данных при Entity подходе Model-first ?

261
Правильно ли выполнены операции с XOR и OR

Правильно ли выполнены операции с XOR и OR

Есть массив byte [] regs, в котором содержатся данные, к которым обращаются с помощью reg1 и reg2 (предварительно получают для них числовые данные с помощью...

209