提前感谢。
我想对来自相机的视频(水印目的)进行0.5不透明度图像重叠。
使用Microsoft EE4时工作正常。但EE4无法在Oracle Virtual Box(Win10)中获得相机。
然后我转向DirectShow,它解决了我在Oracle Virtual Box上的问题,也可以在某些PC上运行。 DirectShow库引用此项目:https://github.com/jacobbo/WebEye
但很奇怪,并非每台机器都可以很好地重叠,在我的笔记本中,当我加载相机视频显示窗口时,我的其他重叠形式也不能透明。
The effect I expect to see: I can see the video on the screen, but screenshot is black, transparent overlap also fail 我很困惑,为什么有些PC工作正常,但其他人失败了,我想知道也许这是根本原因,但经过一些尝试运行它,仍然无法工作。
protected override HandleRef BuildWindowCore(HandleRef hWndParent)
{
RECT clientArea;
GetClientRect(hWndParent.Handle, out clientArea);
_hWnd = CreateWindowEx(0, "Static", "", WindowStyles.WS_CHILD | WindowStyles.WS_VISIBLE | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_OVERLAPPED, 0, 0, clientArea.right - clientArea.left, clientArea.bottom - clientArea.top, hWndParent.Handle, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
然后我进入DirectShowFacade.cpp源代码。实际上,我不知道如何跟踪它,因为我远离win32 API。但是让我非常困惑的是,为什么相同的代码可以有不同的行为,WPF在视频输出上形成透明重叠是在win7和win10的某些设备上成功,但有些失败了!?
void OnPaint(HWND hWnd)
{
if (g_spWindowlessControl != NULL && g_GraphIsRunning)
{
// Paint the window's client area.
PAINTSTRUCT ps;
HDC hdc = ::BeginPaint(hWnd, &ps);
// Request the VMR to paint the video.
HRESULT hr = g_spWindowlessControl->RepaintVideo(hWnd, hdc);
ATLASSERT(SUCCEEDED(hr));
UNREFERENCED_PARAMETER(hr); // Suppress a 'not referenced' warning in Release build.
::EndPaint(hWnd, &ps);
}
}
非常感谢。