对于Directx来说,我是一个新手,并且在两天内一直在努力解决这个问题,但仍然无法让它发挥作用。
我正在尝试使用DirectX Reffered this link捕获视频帧。当我把它放在表单加载中时,代码运行正常如果我尝试从单独的线程或BackgroundWorker类运行代码它抛出异常。我需要继续捕获帧直到视频播放,所以我在表单加载我正在使用此代码 这是我正在使用的代码:
// works fine in the form load and throws exception in the separate thread..why?
while (capture != null)
{
this.capture.FrameEvent2 += new Capture.HeFrame(this.CaptureDone);
this.capture.GrapImg();
}
public void GrapImg()
{
try
{
Trace.Write("IMG");
if (this.savedArray == null)
{
int size = this.snapShotImageSize;
if ((size < 1000) || (size > 16000000))
return;
this.savedArray = new byte[size + 64000];
}
this.sampGrabber.SetCallback(this, 1);
int img = this.sampGrabber.SetCallback(this, 1);
this.frameCaptured = false;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
无法转换类型为&#39; System .__ ComObject&#39;的COM对象。接口类型&#39; DirectShowInterfaces.ISampleGrabber&#39;。此操作失败,因为QueryInterface调用COM组件上的接口与IID&#39; {6B652FFF-11FE-4FCE-92AD-0266B5D7C78F}&#39;由于以下错误而失败:不支持此类接口(来自HRESULT的异常:0x80004002(E_NOINTERFACE))。
任何热门的建议都会非常感激。