簡體   English   中英

BitmapFrame.Create 上的異常(WPF 框架中的錯誤?)

[英]Exception on BitmapFrame.Create (bug in WPF framework?)

我實現了一個 C# 應用程序,它以 30fps 的幀速率接收幀 RGB。

幀到達事件由以下代碼管理:

void client_ColorFrameReady(object sender, ColorFrameReadyEventArgs e)
{
    mycounter++;
    Console.WriteLine("new frame received: " + mycounter);

    if (writer != null)
    {
        count++;
        if (count % 2== 0)
        {
            using (var frame = BitmapImage2Bitmap(e.ColorFrame.BitmapImage))
            using (var thumb = ResizeBitmap(frame, 320, 240))
            {
                writer.WriteVideoFrame(thumb);
            }
        }
    }
    else
    {
        writer.Close();
    }
}

在 if 條件下,我只管理兩幀中的一幀。

當我的代碼調用BitmapImage2Bitmap我獲得了這個異常:

在此處輸入圖片說明

英語的例外應該是:

A first chance exception of type 'System.NotSupportedException' occurred in `PresentationCore.dll`
Additional information: BitmapMetadata is not available on BitmapImage.

奇怪的是,我的應用程序“運行良好”,因為幀正確插入到輸出文件中。

我讀過這個,所以這個問題似乎是 WPF 框架中的一個錯誤。

這是設計使然。 第一次異常通知並不意味着存在問題。 Create() 方法中的相關代碼如下所示:

try
{
    metadata = source.Metadata as BitmapMetadata;
}
catch (NotSupportedException)
{
}

換句話說,異常是意料之中的,並且被簡單地吞下。 這當然很煩人,因為當您在 Debug + Exception 對話框中選中 Throw 復選框時,這些異常確實會使調試器停止。 但這肯定不是錯誤,這是故意這樣寫的。 有時,只是讓異常被拋出並吞下它而不是編寫防止異常的代碼要便宜得多。 特別是當避免異常變得不切實際時,位圖的情況,因為有很多不同類型的位圖類型。 其中一些不支持元數據。 無論在框架代碼中的任何地方進行此操作,幾乎總是這樣做是為了使代碼更快 速度也是代碼的一個重要方面。

功能,不是錯誤。 取消選中 Throw 復選框以避免看到這些異常。

希望我的回答對你有幫助

我使用了相同的代碼,但是當我們使用 BitmapFrame.Create(source) 時,BitmapFrame.cs(在 PresetationCore.dll)發生異常。

所以,我只是使用下面的其他創建函數,它是 BitmpaFrame.Create 的內部函數,

BitmapFrame.cs
     public static BitmapFrame Create(
        BitmapSource source,
        BitmapSource thumbnail,
        BitmapMetadata metadata,
        ReadOnlyCollection<colorcontext> colorContexts
        )

我們可以得到相同的結果BitmapFrame.Create(source, null, null, null).

  • 在你的情況下, enc.Frames.Add(BitmapImage.Create(bitmap, null, null, null));

謝謝。

使用 .NET Framework 4.5 運行,我不得不更改 Microsoft SDK WPF Photo Viewer 示例中的類似行

  _image = BitmapFrame.Create(_source);

  _image = BitmapFrame.Create(_source, BitmapCreateOptions.None, BitmapCacheOption.None);

以避免 ConfigurationErrorsException。 事情似乎在引擎蓋下漂移......

我最近在處理作為資源包含在項目中的圖像時遇到了這個問題(文件屬性中的 BuildType=Resource)。 這似乎是一些與構建相關的問題,它使資源損壞並在 WPF 加載它們時導致看似隨機的問題。 簡單地執行清理/重建會使錯誤消失。 雖然它們可能會在添加新圖像時重新出現,但顯然同樣適用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM