在第一个代码示例中,using
在实际加载图像之前关闭流(通过离开该块)。您还必须设置BitmapCacheOptions.OnLoad来立即加载图像,否则,如第二个示例中所示,流必须保持打开状态。
public BitmapImage ToImage(byte[] array)
{
using (var ms = new System.IO.MemoryStream(array))
{
var image = new BitmapImage();
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad; // here
image.StreamSource = ms;
image.EndInit();
return image;
}
}
从BitmapImage.StreamSource的“备注”部分:
如果要在创建BitmapImage之后关闭流,请将CacheOption属性设置为BitmapCacheOption.OnLoad。
除此之外,您还可以使用内置的类型转换来将类型转换byte[]
为类型ImageSource
(或派生的BitmapSource
):
var bitmap = (BitmapSource)new ImageSourceConverter().ConvertFrom(array);
当您类型的属性绑定ImageSourceConverter被隐式调用ImageSource
(如Image控件的Source
属性),以类型的源属性string
,Uri
或byte[]
。