c# - directshow.net 网络摄像头覆盖透明面板

标签 c# .net winforms directshow.net

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

Example Image

要做到这一点,我认为没问题,网络摄像头源被放入一个图片框中,我将用透明面板或图片框覆盖它,并使用普通的 .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/

相关文章:

c# - 无法以编程方式显示设置的 Winforms 文本框值

c# - ASP.NET/LINQ/EF : Async on custom distinct comparer class

.net - 如何使用.net客户端向和从kafka产生和使用消息

c# - 如何控制来自另一个表单的表单加载

c# - Windows 桌面应用程序也可以在 Windows Phone 上运行吗?

c# - 为什么我不能执行 ExecuteNonQuery()?

c# - Linq to SQL - 分组依据和计数

c# - asp net web api 身份验证 token 过期?

c# - 在另一个 BackgroundWorker 中运行一个 BackgroundWorker

c# - 如何在 "sub"表达式中使用 lambda 表达式参数?