在WPF中加载BitmapImage的源代码?

时间:2012-08-02 04:49:45

标签: c# wpf bitmapimage

在silverlight应用程序中,我将BitmapImage定义为System.Windows.Media.Imaging.BitmapImage,并将其作为一个名为“SetSource”的方法,我可以像这样设置源:

BitmapImage bitmap = new BitmapImage();
System.IO.Stream stream = _scene.GetStream();
if (stream == null) return;
bitmap.SetSource(stream);

在WPF应用程序中,我也有一个 位图图像定义为System.Windows.Media.Imaging.BitmapImage,但没有SetSource方法。如何像在Silverlight应用程序中那样在WPF应用程序中设置源?

此外,它是一个流,而不是一个字符串。它不是URI。所以“UriSource”方法不起作用。我试过这个:

        System.IO.Stream stream = _scene.GetStream();
        if (stream == null) return;
        BitmapImage bitmap = new BitmapImage();

        bitmap.UriSource = new Uri(stream.ToString());

并且在运行时,它抛出了无法确定URI的错误。 URI是Intranet的标识符吗?你确定这不是银光吗?我正在做一个WPF应用程序

2 个答案:

答案 0 :(得分:11)

您必须设置BitmapImage.StreamSource属性:

BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.StreamSource = _scene.GetStream();
bitmap.EndInit();

如果要在创建位图后立即关闭流,则还必须设置BitmapCacheOption.OnLoad选项:

using (Stream stream = _scene.GetStream())
{
    bitmap.BeginInit();
    bitmap.CacheOption = BitmapCacheOption.OnLoad;
    bitmap.StreamSource = stream;
    bitmap.EndInit();
}

答案 1 :(得分:2)

您可以使用constructor指定UriSource

BitmapImage bmp = new BitmapImage(uriSource: new Uri());

或者您可以使用BitmapImage.StreamSource属性设置StreamSource