Я разработал приложение для хранения Windows 8.1, вам нужно сделать снимок с помощью камеры и почты.
MediaCaptureInitializationSettings _captureSettings = new var devices = wait DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); foreach (устройство var в устройствах) { if (device.EnclosureLocation! = null && device.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back) { deviceId = device.Id; ломать; } } if (! string.IsNullOrEmpty(deviceId)) { _captureSettings.AudioDeviceId = ""; _captureSettings.VideoDeviceId = deviceId; _captureSettings.PhotoCaptureSource = Windows.Media.Capture.PhotoCaptureSource.Photo; _captureSettings.StreamingCaptureMode = Windows.Media.Capture.StreamingCaptureMode.Video; } captureManager = новый MediaCapture(); ожидание captureManager.InitializeAsync(_captureSettings); ожидание captureManager.ClearEffectsAsync(MediaStreamType.Photo); capturePreview1.Source = captureManager; ожидание captureManager.StartPreviewAsync(); </Код> Здесь я получаю два устройства, но у устройств EnclosureLocation значение null, поэтому я не могу найти, какая из них - передняя и задняя камеры. поэтому решили получить второе устройство из списка <Код> deviceId = devices [1].Id; </Код> но он выдает ошибку, например: "Текущий источник записи не имеет независимого потока фотографий". в строке инициализации MediaCapture <Код> ожидание captureManager.InitializeAsync(_captureSettings); </Код>
Я пробовал в windows surface pro 2 и устройствах acer. Пожалуйста, порекомендуйте. Заранее спасибо.
Постарайтесь лучше организовать код, у вас есть два знака равенства на одной строке, и ваш код плохо сформирован, поэтому его трудно читать.
Чтобы использовать приложение "Камера в Windows 8.1", я использую этот код:
// First need to find all webcams
DeviceInformationCollection webcamList = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture)
// Then I do a query to find the front webcam
DeviceInformation frontWebcam = (from webcam in webcamList
where webcam.EnclosureLocation != null
&& webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front
select webcam).FirstOrDefault();
// Same for the back webcam
DeviceInformation backWebcam = (from webcam in webcamList
where webcam.EnclosureLocation != null
&& webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back
select webcam).FirstOrDefault();
// Then you need to initialize your MediaCapture
var captureManager = new MediaCapture();
await captureManager.InitializeAsync(new MediaCaptureInitializationSettings
{
// Choose the webcam you want (backWebcam or frontWebcam)
VideoDeviceId = backWebcam.Id,
AudioDeviceId = "",
StreamingCaptureMode = StreamingCaptureMode.Video,
PhotoCaptureSource = PhotoCaptureSource.VideoPreview
});
// Set the source of the CaptureElement to your MediaCapture
capturePreview1.Source = captureManager;
// Start the preview
await captureManager.StartPreviewAsync();
Таким образом, это легче читать. Код не очень отличается, MediaCaptureInitializationSettings - это не то же самое.
Этот код работает для меня на Surface 2 RT и Nokia 635, поэтому он должен работать на вас.
Редактировать:
Кажется, он работает на устройствах с Windows RT, но на всех устройствах с Windows 8.1 он всегда равен нулю. Msdn говорит, что:
Если информация о местоположении в корпусе отсутствует, свойство будет null
так что вы можете сделать, сначала попробуйте увидеть, если вы нашли backwebcam, и если он null принимает последний;
DeviceInformation backWebcam = (from webcam in webcamList
where webcam.EnclosureLocation != null
&& webcam.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back
select webcam).FirstOrDefault();
if (backWebcam == null)
{
backWebcam = webcamList.Last();
}
Но вы не уверены, что последний в коллекции является задним, поэтому вы должны добавить кнопку, чтобы пользователь переключал камеру
Если вы меняете камеру,
await captureManager.StopPreviewAsync();
await captureManager.InitializeAsync(new MediaCaptureInitializationSettings
{
// Choose an other webcam
VideoDeviceId = //id of the new webcam,
AudioDeviceId = "",
StreamingCaptureMode = StreamingCaptureMode.Video,
PhotoCaptureSource = PhotoCaptureSource.VideoPreview
});
await captureManager.StartPreviewAsync();
таким образом, вы можете быть уверены, что пользователь может выбрать правильную камеру, даже если вы программно не можете определить, какой из них