Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自流的怪异可写位图问题_C#_Wpf_Writeablebitmap_Writeablebitmapex - Fatal编程技术网

C# 来自流的怪异可写位图问题

C# 来自流的怪异可写位图问题,c#,wpf,writeablebitmap,writeablebitmapex,C#,Wpf,Writeablebitmap,Writeablebitmapex,我正在拼命尝试使用FromStream扩展方法加载WriteableBitmap 下面的代码在FromStream()调用中抛出一个带有以下信息的System.InvalidOperationException: BitmapImage尚未初始化。调用BeginInit方法,设置适当的属性,然后调用EndInit方法 我验证了映像是否存在,并且它的构建操作设置为Resource。图像是有效的(我将其加载到BitmapImage),并且流具有正确的长度 var sri = Application.

我正在拼命尝试使用
FromStream
扩展方法加载
WriteableBitmap

下面的代码在
FromStream()
调用中抛出一个带有以下信息的
System.InvalidOperationException

BitmapImage尚未初始化。调用BeginInit方法,设置适当的属性,然后调用EndInit方法

我验证了映像是否存在,并且它的构建操作设置为
Resource
。图像是有效的(我将其加载到
BitmapImage
),并且流具有正确的长度

var sri = Application.GetResourceStream(new Uri("dummy.jpg", UriKind.RelativeOrAbsolute));
if (sri != null)
{
    using (var stream = sri.Stream)
    {
        // creates the bitmap, part of the writeablebitmapextensions on WPF
        var wb = BitmapFactory.New(1, 1); 
        wb.FromStream(stream); // <--- Exception
    }
}
var sri=Application.GetResourceStream(新Uri(“dummy.jpg”,UriKind.RelativeOrAbsolute));
if(sri!=null)
{
使用(var stream=sri.stream)
{
//创建位图,它是WPF上可写BitMapExtensions的一部分
var wb=BitmapFactory.New(1,1);

wb.FromStream(stream);//WriteableBitmapConvertExtensions.cs第367行中的FromStream方法似乎已损坏。它缺少对BitmapImage的
BeginInit
EndInit
调用:

public static WriteableBitmap FromStream(this WriteableBitmap bmp, Stream stream)
{
    var bmpi = new BitmapImage();
#if SILVERLIGHT
    bmpi.SetSource(stream);
    bmpi.CreateOptions = BitmapCreateOptions.None;
#elif WPF
    bmpi.StreamSource = stream;
#endif
    bmp = new WriteableBitmap(bmpi);
    return bmp;
}
应该是这样的:

public static WriteableBitmap FromStream(this WriteableBitmap bmp, Stream stream)
{
    var bmpi = new BitmapImage();
#if SILVERLIGHT
    bmpi.SetSource(stream);
    bmpi.CreateOptions = BitmapCreateOptions.None;
#elif WPF
    bmpi.BeginInit();
    bmpi.StreamSource = stream;
    bmpi.EndInit();
#endif
    bmp = new WriteableBitmap(bmpi);
    return bmp;
}