1

谁能告诉我如何通过 Afroge 的 directshow 更改增益或曝光。

我已经尝试了您在下面看到的内容,但没有成功。我究竟做错了什么?

提前致谢

使用 AForge.Video;使用 AForge.Video.DirectShow;

……

VideoCaptureDevice 视频源;

私人无效changeProp(int值){videoSource.SetCameraProperty(CameraControlProperty.Exposure,值,CameraControlFlags.Auto);}

4

1 回答 1

0

这段代码对我有用。大部分代码取自 Afroge Samples。

private VideoCaptureDevice videoDevice;
private FilterInfoCollection videoDevices;
private VideoCapabilities[] videoCapabilities;

public Bool SetCamera(Cameras camera, int camDevice, CameraResolution camResolution,
        int exposureValue, int zoomValue, int focusValue)
    {
        // Enumerate video devices
        videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

        //Select camera according to specified index
        videoDevice = new VideoCaptureDevice(videoDevices[camDevice].MonikerString);

        //Get video capabilities for setting the resoluton
            videoCapabilities = videoDevice.VideoCapabilities;

            if (camera == Cameras.C910)
            {
                switch (camResolution)
                {
                    case CameraResolution.A_640x480:
                        videoDevice.VideoResolution = videoCapabilities[0];
                        break;
                    case CameraResolution.B_800x600:
                        videoDevice.VideoResolution = videoCapabilities[14];
                        break;
                    case CameraResolution.C_960x720:
                        videoDevice.VideoResolution = videoCapabilities[16];
                        break;
                    case CameraResolution.D_1280x720:
                        videoDevice.VideoResolution = videoCapabilities[17];
                        break;
                    case CameraResolution.E_1920x1080:
                        videoDevice.VideoResolution = videoCapabilities[24];
                        break;
                    default:
                        videoDevice.VideoResolution = videoCapabilities[0];
                        break;
                }

            }
            else if (camera == Cameras.C920)
            {
                switch (camResolution)
                {
                    case CameraResolution.A_640x480:
                        videoDevice.VideoResolution = videoCapabilities[0];
                        break;
                    case CameraResolution.B_800x600:
                        videoDevice.VideoResolution = videoCapabilities[10];
                        break;
                    case CameraResolution.C_960x720:
                        videoDevice.VideoResolution = videoCapabilities[12];
                        break;
                    case CameraResolution.D_1280x720:
                        videoDevice.VideoResolution = videoCapabilities[14];
                        break;
                    case CameraResolution.E_1920x1080:
                        videoDevice.VideoResolution = videoCapabilities[16];
                        break;
                    default:
                        videoDevice.VideoResolution = videoCapabilities[0];
                        break;
                }
            }
            else
            {
                videoDevice.VideoResolution = videoCapabilities[0];
            }

        try
        {   
            videoDevice.SetCameraProperty(
                CameraControlProperty.Zoom,
                zoomValue,
                CameraControlFlags.Manual);

            videoDevice.SetCameraProperty(
                CameraControlProperty.Focus,
                focusValue,
                CameraControlFlags.Manual);

            videoDevice.SetCameraProperty(
                CameraControlProperty.Exposure,
                exposureValue,
                CameraControlFlags.Manual);

        }
        catch (Exception ex)
        {
            MessageBox.show(ex.ToString());
        }
于 2014-09-25T17:17:45.387 回答