【问题标题】:Weird WriteableBitmap FromStream issue奇怪的 WriteableBitmap FromStream 问题
【发布时间】:2015-03-16 14:54:59
【问题描述】:

我正在拼命尝试使用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
    }
}

该错误似乎表明扩展方法在内部以不正确的方式使用了BitmapImage,我很难相信。我正在使用WriteableBitmapEx.Wpf 1.0.14.0

什么可能导致此异常?我的应用程序中没有运行其他代码。

【问题讨论】:

    标签: c# wpf writeablebitmap writeablebitmapex


    【解决方案1】:

    WriteableBitmapConvertExtensions.cs 第 367 行中的 FromStream 方法似乎已损坏。它缺少对 BitmapImage 的 BeginInitEndInit 调用:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 2018-06-26
      • 2011-08-13
      • 2011-08-17
      • 2011-02-02
      • 2021-10-10
      • 2014-04-21
      • 2010-12-30
      • 2014-03-21
      相关资源
      最近更新 更多