给定一个 WPF Image 控件,是否可以确定其 HWND?
我正在 WPF 应用程序中集成网络摄像头。当我将相机的句柄传递给 DirectShow 函数时,我可以在主窗口中看到相机的输入。但这不是我想要的。
主窗体有一个图像控件,我想在其中查看输出。但是,为了做到这一点,我需要控件的句柄。
关于如何执行此操作有任何提示吗?
提前致谢, 吉安卢卡.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
WPF 中的图像控件,与 Windows 窗体不同,实际上没有 HWND。
WPF 的工作方式与 Windows 窗体不同 - 每个控件不是带有句柄的本机“窗口”的包装器,而是由布局系统在运行时使用 Direct3D 组合在一起。
如果您需要实际托管 WPF 窗口内网络摄像头的输出,您应该考虑使用 HwndHost (或子类)。最简单的方法通常是在 WindowsFormsHost,尽管通过
HwndHost
自行管理 HWND 效率更高。An Image Control in WPF, unlike Windows Forms, doesn't actually have an HWND.
WPF works differently than Windows Forms - each control is not a wrapper around a native "window" with a handle, but rather composed together using Direct3D at runtime by the layout system.
If you need to actually host output from a Webcam inside of a WPF window, you should look at using HwndHost (or a subclass). The simplest way is often to just host a Windows Forms control inside of a WindowsFormsHost, though managing an HWND yourself via
HwndHost
is more efficient.使用 WindowsFormsHost 和内部的图片框是一个很好的解决方案,我用它来解决类似的问题,我需要一个句柄来显示视频流。但要小心,为了工作,承载 WindowsFormsHost 控件的窗口必须具有AllowsTransparency =“false”!
Using an WindowsFormsHost and a picture box inside is a good solution that I used for a similar problem where I needed a handle to display a video stream. But be careful, in order to work, the Window that is hosting the WindowsFormsHost control must have AllowsTransparency="false"!