簡體   English   中英

directshow.net網絡攝像頭覆蓋透明面板

[英]directshow.net webcam overlay transparent panel

我正在嘗試使用網絡攝像頭拍攝徽章的照片。 為此,我使用了directshow.net庫和示例,根據DxSnap示例,這使我獲得了.NET中的網絡攝像頭預覽屏幕,該屏幕顯示在圖片框中。 現在,我希望用一個可移動且可調整大小的矩形(鎖定的寬高比)覆蓋它,以便最終用戶將其拖動到該人上方,以在適當的位置從網絡攝像頭拍攝圖像。 所以看起來像這樣:

范例圖片

為此,我認為沒有問題,將網絡攝像頭源放入圖片框,我將其覆蓋在透明面板或圖片框上,並使用普通的.NET代碼在該框上制作一個矩形。 如果我覆蓋普通面板,則它會按預期顯示在DirectShow網絡攝像頭輸出上方。 但是,如果我使用此技巧來實現透明面板或圖片框:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams createParams = base.CreateParams;
        createParams.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
        return createParams;
    }
}

protected override void OnPaintBackground(PaintEventArgs e)
{
   // Do not paint background.
}

不幸的是,它顯示在DirectShow輸出的下面。 有沒有一種簡單的方法來解決此問題或替代方法。 如果可以避免,我寧願不要對DirectShow.net進行深入研究,我認為這是避免該問題的簡便方法。

我最終使用了AForge.NET項目而不是DirectShow.NET。 它具有一些非常好的樣本,並且繪制其視頻輸出就像處理其視頻播放器的OnPaint事件一樣簡單,因為它針對每一幀進行調用。 似乎要占用更多的CPU,但不會增加任何負擔。

覆蓋的問題是,通過特定方法在視頻適配器上創建非RGB表面(通常),視頻以不同於常規GUI圖形的方式顯示。 因此,您不能將視頻與窗口重疊,也不能直接使用GDI。

您仍然可以在途中修改視頻,或使用特殊的混音器疊加視頻。

看到這個問題: 使用DirectShow.NET在C#中的IVideoWindow上顯示半透明的Image對象,因為它討論了類似的請求。

暫無
暫無

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

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