#web-config #webcam #directshow #aforge #webcam-capture
#web-config #Вебкам #directshow #aforge #веб-камера-захват
Вопрос:
может кто-нибудь сказать мне, как я могу изменить усиление или экспозицию с помощью directshow из Afroge.
Я уже пробовал то, что вы можете увидеть ниже, но безуспешно. Что я делаю не так?
Заранее спасибо
использование AForge.Видео; с использованием AForge.Видео.DirectShow;
…
…
VideoCaptureDevice VideoSource;
private void changeProp(значение int) { Видеоисточник.Установите свойство Cameraproperty(CameraControlProperty.Экспозиция, значение, флаги cameracontrol.Авто); }
Комментарии:
1. Привет. Вы нашли ответ?
Ответ №1:
Этот код работает для меня. Большая часть кода взята из примеров Afroge.
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());
}
Комментарии:
1. Это потрясающе, но как мне сделать это из приложения UWP? Не похоже, что я могу использовать пакет nuget AForge, и по умолчанию возвращаются «Яркость», «Экспозиция» и т. Д. Как неподдерживаемые. Но это поддерживается в DirectShow. Так как же мне это сделать? Когда я пытаюсь вызвать DirectShow, он просто вылетает. Это камера UVC, и она отлично работает с DirectShow для изменения свойств камеры, но я не могу заставить ее работать в UWP. И на данный момент у меня довольно большое приложение, но я могу переписать его на C , если это единственный способ?