我正在使用Visual Studio制作Windows窗体应用程序。该应用程序允许您输入要为照片命名的内容,然后将该图像保存到网络上的特定位置。当我在笔记本电脑上使用它时效果很好。但是,当我尝试在桌面上运行它时,它不起作用。相反,我收到了消息:
System.Runtime.InteropServices.COMException(0x80040217):没有 可以找到中间过滤器的组合来制作 连接。
在DirectShowLib.DsError.ThrowExceptionForHR(Int32 hr)
在OrderProductCapture.Capture.SetupGraph(DsDevice dev,Int32 iWidth, Int32 iHeight,Int16 iBPP,控制hControl)
在OrderProductCapture.Capture.ctor(Int32 iDeviceNum,Int32 iWidth, Int32 iHeight,Int16 iBPP,控制hControl)
在OrderProductCapture.frmMain.ctor()
Call Stack说:
OrderProductCapture.exe!OrderProductCapture.Capture(int iDeviceNum, int iWidth, int iHeight, short iBPP, System.Windows.Forms.Control hControl) Line 82
OrderProductCapture.exe!OrderProductCapture.frmMain.frmMain() Line 50
OrderProductCapture.exe!OrderProductCapture.Program.Main() Line 19
我已经多次搜索过这个问题,而且我已经查看过大多数关于SO的类似问题了。两台计算机都使用Windows 7专业版。任何帮助都会很棒。
这是我的代码捕获异常的代码。我认为代码不对,因为它在我的笔记本电脑上工作正常。
public Capture(int iDeviceNum, int iWidth, int iHeight, short iBPP, Control hControl)
{
DsDevice [] capDevices;
// Get the collection of video devices
capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
if (iDeviceNum + 1 > capDevices.Length)
{
throw new Exception("No video capture devices found at that index!");
}
try
{
// Set up the capture graph
SetupGraph( capDevices[iDeviceNum], iWidth, iHeight, iBPP, hControl);
// tell the callback to ignore new images
m_PictureReady = new ManualResetEvent(false);
}
catch
{
Dispose();
throw;
}
}
答案 0 :(得分:3)
当必须在媒体格式之间进行转换时,您可以通过编程方式强制它使用某些特定的过滤器链并根据您的需要进行配置,但DirectSHOW还具有猜测"正确的工具。它知道操作系统中经常安装的所有微小媒体处理程序,并尝试匹配它们,以便最终要求转换"建成。
但是,DirectShow仍然需要要安装的那些微型转换器。 DS能够分析和连接它们,但不会为您提供对外来媒体类型的任何支持。通常情况下,如果操作系统是" new-n-clean"即使是非传统的也可能会出现问题。
如果我没记错的话,那个错误基本上意味着(在这个有问题的机器上)一些"编解码器"不见了。
这些事情经常伴随着:
我现在要做的第一件事就是:
另外,您可以阅读SetupGraph()
函数的代码。我敢打赌,这里明确提到了正在使用的格式,这可能会指出缺少哪些编解码器。
编解码器有时也会损坏(实际上不是他们自己,但他们的配置和注册条目可能会被损坏)。如果您确定机器上有正确的编解码器,请重新安装或修复" (如果他们有这样的选择)他们可以提供帮助。