AForge.NET 2.2.5 的videoSourcePlayer控件做的摄像程序在新装的xp系统下调用采摄像头无图像黑屏,采集不到图像,但摄像头灯会亮。
但把程序拷贝到win7或自己做开发的xp系统上能正常使用,在不能正常用的xp系统下直接用vc+ directshow开发的视频软件也能正常使用。
为什么会出现这种情况?
//代码
videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
。。。
//委托促发分辨率等设置
private void EnumeratedSupportedFrameSizes(VideoCaptureDevice videoDevice)
{
this.Cursor = Cursors.WaitCursor;
videoResolutionsCombo.Items.Clear();
snapshotResolutionsCombo.Items.Clear();
try
{
videoCapabilities = videoDevice.VideoCapabilities;
snapshotCapabilities = videoDevice.SnapshotCapabilities;
//视频分辨率
foreach (VideoCapabilities capabilty in videoCapabilities)
{
videoResolutionsCombo.Items.Add(string.Format("{0} x {1}",
capabilty.FrameSize.Width, capabilty.FrameSize.Height));
}
//快照
foreach (VideoCapabilities capabilty in snapshotCapabilities)
{
snapshotResolutionsCombo.Items.Add(string.Format("{0} x {1}",
capabilty.FrameSize.Width, capabilty.FrameSize.Height));
}
if (videoCapabilities.Length == 0)
{
videoResolutionsCombo.Items.Add("不支持");
}
if (snapshotCapabilities.Length == 0)
{
snapshotResolutionsCombo.Items.Add("不支持");
}
videoResolutionsCombo.SelectedIndex = Convert.ToInt32( ContentValue("Device", "SVideoIndex"));
snapshotResolutionsCombo.SelectedIndex = 0;
}
finally
{
this.Cursor = Cursors.Default;
}
}
设备连接
private void VideoConnect()
{
if (videoDevice != null)
{
//选择连接设备
if ((videoCapabilities != null) && (videoCapabilities.Length != 0))
{
//分辨率设置
videoDevice.VideoResolution = videoCapabilities[videoResolutionsCombo.SelectedIndex];
}
//快照用
if ((snapshotCapabilities != null) && (snapshotCapabilities.Length != 0))
{
videoDevice.ProvideSnapshots = true;
videoDevice.SnapshotResolution = snapshotCapabilities[snapshotResolutionsCombo.SelectedIndex];
videoDevice.SnapshotFrame += new NewFrameEventHandler(videoDevice_SnapshotFrame);
}
EnableConnectionControls(false);
videoSourcePlayer.VideoSource = videoDevice;
videoSourcePlayer.Start();
}
}