Раньше я использовал задачу выбора фотографий в своих приложениях C# Window Store (WinRT). В Windows Phone есть дополнительная задача, которую вы можете запустить, которая позволяет пользователю сделать фотографию и возвращает ссылку на данные изображения для вашего потребления. Кажется, я не могу найти то же самое в API приложений Магазина Windows. Я знаю об API захвата мультимедиа и API захвата камеры в WinRT, но, очевидно, будет проще, если есть полномасштабная задача, которую я могу запустить для обработки всей операции съемки, а не кодировать что-то самостоятельно. Есть ли такая возможность в API приложений Магазина Windows?
Есть ли системная задача, которая может делать фотографии в WinRT API?
Ответы (2)
В Windows 8.1 (не на телефоне) Windows Класс .Media.Capture.CameraCaptureUI очень прост в использовании — всего пара строк кода, и он имеет встроенные функции, такие как выбор камеры, плотность пикселей и кадрирование:
using Windows.Media.Capture;
using Windows.Storage;
CameraCaptureUI dialog = new CameraCaptureUI();
StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo);
Переменная файла будет иметь захваченное изображение. См. пример пользовательского интерфейса Camera Capture для получения дополнительных сведений и способов использования.
Обратите внимание, что если вы нацелены на универсальное приложение для Windows 8.1, этот API недоступен в этой версии Windows Phone, и вам потребуется написать собственную процедуру захвата, как демонстрирует Аурелиен.
Кодировать что-то самостоятельно, так что эта задача не так уж сложна.
Я уже ответил на аналогичный вопрос, вы могли бы использовать ответ:
Использование камеры в Windows (Phone) 8.1
Я переписываю свой ответ там, он содержит код для поиска веб-камер на устройстве, инициализации той, которую вы выбираете, а также фотографирования с нее и сохранения ее там, где вы хотите.
Код был предназначен для Windows Phone, для настольных или планшетных приложений, единственное, что я бы изменил, это выбор веб-камеры, поскольку пользователь может использовать внешнюю веб-камеру, возможно, на компьютере нет встроенных.
Вот код:
Первая часть инициализации
// First need to find all webcams
DeviceInformationCollection webcamList = await DeviceInformation.FindAllAsync(DeviceClass.All)
(в следующих строках я получаю переднюю и заднюю веб-камеру, но для приложений, отличных от телефона, вам лучше выбрать, например, индекс 0 в webcamList)
// 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
newCapture = new MediaCapture();
await newCapture.InitializeAsync(new MediaCaptureInitializationSettings
{
// Choose the webcam you want
VideoDeviceId = backWebcam.Id,
AudioDeviceId = "",
StreamingCaptureMode = StreamingCaptureMode.Video,
PhotoCaptureSource = PhotoCaptureSource.VideoPreview
});
// Set the source of the CaptureElement to your MediaCapture
// (In my XAML I called the CaptureElement *Capture*)
Capture.Source = newCapture;
// Start the preview
await newCapture.StartPreviewAsync();
Во-вторых, сфотографируйте
//Set the path of the picture you are going to take
StorageFolder folder = ApplicationData.Current.LocalFolder;
var picPath = "\\Pictures\\newPic.jpg";
StorageFile captureFile = await folder.CreateFileAsync(picPath, CreationCollisionOption.GenerateUniqueName);
ImageEncodingProperties imageProperties = ImageEncodingProperties.CreateJpeg();
//Capture your picture into the given storage file
await newCapture.CapturePhotoToStorageFileAsync(imageProperties, captureFile);
Сделанный! изображение сохраняется по указанному пути в папке хранилища приложений.