2011-10-10 133 views
2

我想用攝像頭爲徽章拍照。爲了做到這一點,我使用了directshow.net庫和示例,這爲我帶來了一個按照DxSnap示例在一個picturebox中呈現的.NET攝像頭預覽屏幕。我現在想用可移動和可調整大小的矩形(鎖定寬高比)覆蓋它,以便最終用戶將其拖動到人物上,以便在適當的位置從網絡攝像頭拍攝圖像。因此,這將是這個樣子:directshow.net攝像頭覆蓋透明面板

Example Image

要做到這一點,我覺得沒有問題,網絡攝像頭資源放入圖片框,我將只是一個透明的面板或圖片框覆蓋它和正常使用。 NET代碼在那裏做一個矩形。如果我覆蓋正常的面板,它會按照預期顯示在directshow網絡攝像頭輸出的上方。然而,如果我使用這個技巧來實現透明面板或者picturebox:

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,我認爲這將是避免它的一種簡單方法。

回答

1

我已經結束了使用AForge.NET項目而不是DirectShow.NET。它具有一些非常棒的樣本,並且通過處理其視頻播放器的OnPaint事件來繪製視頻輸出,因爲它會針對每個幀調用它。它似乎需要多一點的CPU,但沒有太多的稅收。

+0

如果您對答案感到滿意,則應將其標記爲答案。 –

+0

由於存在開放的賞金,其他人可能希望爲稍後看到的人提供替代方案,是否還有其他建議。 – PeteT

+0

這完全救了我!路要走。我以前不知道這個圖書館。 – ashays

0

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

您仍然可以在路上修改視頻,或使用專用混音器疊加視頻。

看到這個問題:Showing a semi-transparent Image object over an IVideoWindow in C# using DirectShow.NET,因爲它討論了類似的請求。