2011-10-10 134 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,因为它讨论了类似的请求。