我正在尝试使用网络摄像头为徽章拍照。为此,我使用了 directshow.net 库和示例,这为我提供了 .NET 中的网络摄像头预览屏幕,按照 DxSnap 示例在图片框中呈现。我现在希望用一个可移动和可调整大小(锁定纵横比)的矩形覆盖它,以便最终用户将其拖到人身上以在适当的位置从网络摄像头拍摄图像。所以它看起来像这样:
要做到这一点,我认为没问题,网络摄像头源被放入一个图片框中,我将用透明面板或图片框覆盖它,并使用普通的 .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,但不会太费力。
关于c# - directshow.net 网络摄像头覆盖透明面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7711035/