分我已經與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);
}
}