Я использую класс захвата мультимедиа Windows 8, чтобы щелкнуть фотографию в приложении для рабочего стола и скопировать ее в буфер обмена.Замедленный захват камеры
Моя функция принимает два входа в качестве аргумента, 1) нужное устройство (спереди, сзади или USB веб-камеры) и 2) желаемое разрешение
Здесь функции:
async public void UseCamera(int x, int y)
{
MediaCapture _mediaCapture = new MediaCapture();
var _ImageFormat = ImageEncodingProperties.CreatePng();
var _fileStream = new InMemoryRandomAccessStream();
MediaCaptureInitializationSettings _cameraSettings1 = new MediaCaptureInitializationSettings();
DeviceInformationCollection _deviceInformationCollection = null;
IReadOnlyList<IMediaEncodingProperties> res;
_deviceInformationCollection = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
if (x > _deviceInformationCollection.Count - 1)
{
MessageBox.Show("Device Not found");
}
else
{
_cameraSettings1.VideoDeviceId = _deviceInformationCollection[x].Id;
_cameraSettings1.AudioDeviceId = "";
_cameraSettings1.PhotoCaptureSource = PhotoCaptureSource.VideoPreview;
_cameraSettings1.StreamingCaptureMode = StreamingCaptureMode.Video;
await _mediaCapture.InitializeAsync(_cameraSettings1);
res = _mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoPreview);
uint maxResolution = 0;
List<int> indexMaxResolution = new List<int>();
if (res.Count >= 1)
{
for (int i = 0; i < res.Count; i++)
{
VideoEncodingProperties vp = (VideoEncodingProperties)res[i];
if (vp.Width > maxResolution)
{
indexMaxResolution.Add(i);
maxResolution = vp.Width;
}
}
indexMaxResolution.Reverse();
if (y > indexMaxResolution.Count())
{
MessageBox.Show("Maximum supported resolution index : " + (indexMaxResolution.Count - 1).ToString());
}
//this is the part that I believe is the trouble maker
else
{
await _mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, res[indexMaxResolution.ElementAt(y)]);
await _mediaCapture.CapturePhotoToStreamAsync(_ImageFormat, _fileStream);
Clipboard.SetImage(Image.FromStream(_fileStream.AsStream()));
}
}
}
}
Функция работает, но проблема в том, что она невероятно медленная. Для захвата фотографии требуется почти 4-5 секунд. Может кто-нибудь сказать мне, где я иду не так, и как я могу ускорить процесс. Потому что я тестировал свою камеру, и она может принимать клики @ почти 2 фото в секунду.
Я тоже это пробовал .. Я инициализировал все три камеры и перечислил их разрешение перед началом запуска программы. Инициализация камеры и индексация разрешений выполняются довольно быстро, я считаю, что фактический захват замедляет работу. –
Вы также можете попытаться сохранить изображения в памяти и написать их только в случае необходимости. Буфер обмена может быть слишком медленным. Это единственное, что вы можете изменить, насколько я знаю. Возможно, добавление некоторых таймеров может помочь вам указать самые медленные части. –