WPF: как сохранить изображение в сериализуемом объекте с помощью JpegBitmapEncoder и снова использовать его с JpegBitmapDecoder? - PullRequest
0 голосов
/ 08 августа 2010

У меня есть этот код для декодирования потока памяти, но, как ни странно, я получаю эту ошибку: «Не найдено ни одного компонента обработки изображений, подходящего для выполнения этой операции».

MemoryStream stream = new MemoryStream(value, false);
                stream.Seek(0, SeekOrigin.Begin);
                JpegBitmapDecoder JpegBitmapDecoder = new JpegBitmapDecoder(
                    stream, BitmapCreateOptions.None,
                    BitmapCacheOption.None);

                image.Source = JpegBitmapDecoder.Frames[0];
                image.Height = hh;
                image.Width = ww;
                stream.Close();
                UIVisual.Background = null;
                UIVisual.Child = image;
                UIVisual.UpdateLayout();
                image = null;

И вот какЯ преобразовал изображение в байты:

    JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();

    jpgEncoder.Frames.Add(bitmapFrame);
    Byte[] _imageArray;
    MemoryStream memStream = new MemoryStream();
    jpgEncoder.Save(memStream);
    return memStream.ToArray();

, поэтому я сохраняю memStream.ToArray (), чтобы использовать его позже, я создаю MemoryStream из хранимой memStream.ToArray () и использую его с JpegBitmapDecoder, как показано выше.

Почему я не могу получить сохраненные байты ??что-то не так я делаю ??Спасибо

1 Ответ

1 голос
/ 22 марта 2011

Привет, у вас есть два варианта возврата как Byte [] или MemoryStream, см. Следующий код.

Надеюсь, что это может помочь

Шалом Кейнан

    private static  MemoryStream GetImageAsMemoryStream(BitmapSource bitmapSource)
    {
        JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
        jpgEncoder.Frames.Add(BitmapFrame.Create(bitmapSource));
        // Byte[] _imageArray;
        MemoryStream memStream = new MemoryStream();
        jpgEncoder.Save(memStream);
        //_imageArray= memStream.ToArray();
        memStream.Seek(0, SeekOrigin.Begin); // you MUST rewind before decoding
        return memStream;
     }

    private static Byte[] GetImageAsByte(BitmapSource bitmapSource)
    {
        JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
        jpgEncoder.Frames.Add(BitmapFrame.Create(bitmapSource));
        Byte[] _imageArray;
        MemoryStream memStream = new MemoryStream();
        jpgEncoder.Save(memStream);
        _imageArray = memStream.ToArray();
        return _imageArray;
    }

удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...