1

我需要将 byte[] 转换为 BitmapImage 并在 WPF 图像控件中显示它。(img.Source = ...)。

如果我像这样转换它:

m_photo = new BitmapImage();

using (MemoryStream stream = new MemoryStream(photo.ToArray()))
{
    m_photo.BeginInit();
    m_photo.StreamSource = stream;
    m_photo.EndInit();
}

它不能将 XAML 绑定到 Source 属性,因为“m_photo 拥有另一个流”......我该怎么办?

4

2 回答 2

1

在 begininit 之后将缓存选项设置为 OnLoad

m_photo.CacheOption = BitmapCacheOption.OnLoad;

编辑:bmp 数组到图像源的完整代码

                DrawingGroup dGroup = new DrawingGroup();
                using (DrawingContext drawingContext = dGroup.Open())
                {
                    var bmpImage = new BitmapImage();
                    bmpImage.BeginInit();
                    bmpImage.CacheOption = BitmapCacheOption.OnLoad;

                    bmpImage.StreamSource = new MemoryStream(photoArray);
                    bmpImage.EndInit();
                    drawingContext.DrawImage(bmpImage, new Rect(0, 0, bmpImage.PixelWidth, bmpImage.PixelHeight));
                    drawingContext.Close();
                }
                DrawingImage dImage = new DrawingImage(dGroup);
                if (dImage.CanFreeze)
                    dImage.Freeze();
                imageControl.Source = dImage;
于 2012-08-16T01:48:39.130 回答
0

好的,我刚刚找到了解决方案。如果在类代码中使用此代码(将 byte[] 转换为 bitmapSource) - 您会遇到此错误,表明该对象位于另一个流中。但是,如果创建一个转换器 (IValueConverter) 并将其与 XAML 绑定中的相同转换代码一起使用 - 一切正常!

谢谢大家!

于 2012-08-16T06:41:15.580 回答