我正在试着用摄像头来拍摄徽章的照片。为了做到这一点,我使用了directshow.net库和示例,这让我在.NET中获得了一个网络摄像头预览屏幕,按照DxSnap示例在图片框中呈现。我现在希望用一个可移动和可调整大小(锁定纵横比)的矩形来覆盖它,这样最终用户就可以将其拖到人身上,以便在适当的点从网络摄像头中获取图像。所以它看起来像这样:

要做到这一点,我认为没有问题,网络摄像头的源代码是放在一个图片框,我将只需覆盖它与一个透明的面板或相框,并使用正常的.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,我认为这是避免它的一种简单方法。
发布于 2011-10-14 18:58:22
我最终使用的是AForge.NET项目而不是DirectShow.NET,它有一些非常棒的示例,绘制它的视频输出就像处理它的视频播放器OnPaint事件一样简单,因为它为每一帧调用它。它似乎需要更多的CPU,但不会太费力。
发布于 2011-10-12 17:47:42
叠加的问题是,通过在视频适配器上创建非RGB表面(通常是)的特定方法,视频以不同于常规GUI图形的方式显示。因此,您不能将视频与窗口重叠,也不能直接使用GDI。
你仍然可以在途中修改视频,或者使用特殊的混音器覆盖视频。
请看这个问题:Showing a semi-transparent Image object over an IVideoWindow in C# using DirectShow.NET,因为它讨论了一个类似的请求。
https://stackoverflow.com/questions/7711035
复制相似问题