分我已经与Directshow.NET一个C#应用程序,以显示相机的预览。一切都进展顺利,几乎在每一个操作系统,但在某些Windows 10操作系统的机器(不是每赢OS 10,只是其中的一些)预览进去Paint
事件Control
在行hr = vmr9Control.RepaintVideo(hControl.Handle, gHDC);
失败,原因是异常Attempted to divide by zero.
。IVMRWindowlessControl.RepaintVideo导致试图通过零
我搜索了很多找到这个异常的原因,连我formattted机器之一,但问题仍然存在。同样根据观察,这个例外不会在第一次尝试预览时发生,在5-6次迭代后,预览&停止预览会导致此异常。
private void SetupGraph(DsDevice dev, Control hControl)
{
...
vmr9Control = (IVMRWindowlessControl)vmr9preview;
vmr9Control.SetVideoClippingWindow(hControl.Handle);
vmr9Control.SetAspectRatioMode(VMRAspectRatioMode.None);
hControl.Paint += new PaintEventHandler(hControl_Paint);
...
}
[System.Security.Permissions.SecurityPermission(
System.Security.Permissions.SecurityAction.LinkDemand, Flags =
System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
void hControl_Paint(object sender, PaintEventArgs e)
{
if (isPreviewstarted && vmr9Control != null)
{
int hr;
IntPtr gHDC = e.Graphics.GetHdc();
hr = vmr9Control.RepaintVideo(hControl.Handle, gHDC);
DsError.ThrowExceptionForHR(hr);
e.Graphics.ReleaseHdc(gHDC);
}
}