如何使用JpegBitmapDecoder解码字节数组

时间:2015-01-24 13:52:34

标签: c# .net wpf bitmap imagesource

我无法将编码形式的图像解码为从我的数据库中检索的(Jpeg)字节数组,以用作我的WPF应用程序的图像源。

我用来将它们编码为Jpeg字节数组的代码如下:

public byte[] bytesFromBitmap(BitmapImage bit)
    {
        byte[] data;
        JpegBitmapEncoder encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bit));
        using (MemoryStream ms = new MemoryStream())
        {
            encoder.Save(ms);
            data = ms.ToArray();
        }

        return data;

    }

这是我的图片直接从网页上拍摄并分配到像这样的图像控件:

var img = new BitmapImage(new Uri(entity.Image.ImageSrc)); //the entity has been saved in my DB, having been parsed from html
pbImage.Source = img;

这很好用,我对BitmapImage进行了编码,它保存得很好。但是当我从数据库中检索它并尝试在另一个窗口中显示它时,在尝试我可以在网上看到的每个例子之后我都无法让它工作 - 所有这些都没有渲染,或者黑盒子或视觉混乱根本不相似我编码的图像。

以下任何一项都不适用于我:

public BitmapSource GetBMImage(byte[] data)
    {
        using (var ms = new MemoryStream(data))
        {
            JpegBitmapDecoder decoder = new JpegBitmapDecoder(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
            BitmapSource frame = decoder.Frames[0];

            return frame;

        }
    }

 public static BitmapImage ImageFromBytes(byte[] imageData)
    {
        if (imageData == null)
        {
            return null;
        }
        else
        {
            var image = new BitmapImage();
            using (var mem = new MemoryStream())
            {
                mem.Position = 0;
                image.BeginInit();
                image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.UriSource = null;
                image.StreamSource = mem;
                image.EndInit();
            }
            image.Freeze();
            return image;
        }
    } //this throws a 'No imaging component suitable to complete this operation was found' exception

在内存流和解码器的其他用途中,我无法让它工作 - 任何人都可以帮忙吗?

0 个答案:

没有答案