WPF:如何使用JpegBitmapEncoder将图像存储在可序列化的对象中,并再次使用JpegBitmapDecoder?

时间:2010-08-08 14:37:14

标签: wpf

我有这个代码来解码内存流,但是,它没有担心,我得到这个错误: “没有找到适合完成此操作的成像组件。”

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()以便以后使用它,我从存储的memStream.ToArray()创建MemoryStream,并像上面的代码一样使用JpegBitmapDecoder。

为什么我无法检索存储的字节?我做错了吗? 感谢

1 个答案:

答案 0 :(得分:1)

您有两个选项返回Byte []或MemoryStream,请参阅以下代码。

希望它可以提供帮助

Shalom Keynan

    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;
    }
祝你好运!