私はカメラのプレビューを表示するためにDirectShow.NETでC#アプリケーションを開発しました。すべてのOSはほぼすべてのOSでうまくいっていますが、一部のWindows OS 10マシン(すべてのOS 10を勝ち抜いているわけではありません)では、Attempted to divide by zero.
のhr = vmr9Control.RepaintVideo(hControl.Handle, gHDC);
のPaint
イベントがControl
にあります。IVMRWindowlessControl.RepaintVideoが0で除算しようとしました
私はマシンの1つをフォーマットしても、この例外の原因を見つけるために多くを探しましたが、問題はまだあります。また、観察ごとに、この例外はプレビューの最初の試行では来ない、プレビューの表示を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);
}
}