Есть ли системная задача, которая может делать фотографии в WinRT API?

Раньше я использовал задачу выбора фотографий в своих приложениях C# Window Store (WinRT). В Windows Phone есть дополнительная задача, которую вы можете запустить, которая позволяет пользователю сделать фотографию и возвращает ссылку на данные изображения для вашего потребления. Кажется, я не могу найти то же самое в API приложений Магазина Windows. Я знаю об API захвата мультимедиа и API захвата камеры в WinRT, но, очевидно, будет проще, если есть полномасштабная задача, которую я могу запустить для обработки всей операции съемки, а не кодировать что-то самостоятельно. Есть ли такая возможность в API приложений Магазина Windows?


person Robert Oschler    schedule 11.09.2014    source источник


Ответы (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, и вам потребуется написать собственную процедуру захвата, как демонстрирует Аурелиен.

person Kraig Brockschmidt - MSFT    schedule 02.10.2014

Кодировать что-то самостоятельно, так что эта задача не так уж сложна.

Я уже ответил на аналогичный вопрос, вы могли бы использовать ответ:

Использование камеры в 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);

Сделанный! изображение сохраняется по указанному пути в папке хранилища приложений.

person Aurelien Souchet    schedule 02.10.2014