Подтвердить что ты не робот

Захват фотографии в приложении Windows Store для Windows Phone

Хорошо, мой вопрос прост:
Как сделать снимок с помощью Windows Store App для Windows Phone 8.1, используя камеру?
Образцы в MSDN используют Windows.Media.Capture.CameraCaptureUI, который нельзя использовать на Windows Phone или для Silverlight.
Я не могу найти какой-либо документ или образец специально для приложения Windows Phone, используя Windows Runtime.
Если кто-то знает или даже получит документ для этого, я был бы рад.

4b9b3361

Ответ 1

В WP8.1 Runtime (также в Silverlight) вы можете использовать MediaCapture. Короче говоря:

// First you will need to initialize MediaCapture
Windows.Media.Capture.MediaCapture  takePhotoManager = new Windows.Media.Capture.MediaCapture();
await takePhotoManager.InitializeAsync();

Если вам нужен предварительный просмотр, вы можете использовать CaptureElement:

// In XAML: 
<CaptureElement x:Name="PhotoPreview"/>

Затем в коде позади вы можете запустить/остановить просмотр следующим образом:

// start previewing
PhotoPreview.Source = takePhotoManager;
await takePhotoManager.StartPreviewAsync();
// to stop it
await takePhotoManager.StopPreviewAsync();

Наконец, чтобы взять фотографию, вы можете, например, перенести ее непосредственно в файл CapturePhotoToStorageFileAsync или в поток CapturePhotoToStreamAsync:

ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();

// a file to save a photo
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
        "Photo.jpg", CreationCollisionOption.ReplaceExisting);

await takePhotoManager.CapturePhotoToStorageFileAsync(imgFormat, file);

Если вы хотите захватить видео, то вот более подробная информация.

Также не забудьте добавить Webcam в Capabilities вашего файла манифеста и Front/Rear Camera в Requirements.


Если вам нужно выбрать камеру (fornt/back), вам нужно будет получить идентификатор камеры и затем инициализировать MediaCapture с помощью необходимых настроек:

private static async Task<DeviceInformation> GetCameraID(Windows.Devices.Enumeration.Panel desired)
{
    DeviceInformation deviceID = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture))
        .FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == desired);

    if (deviceID != null) return deviceID;
    else throw new Exception(string.Format("Camera of type {0} doesn't exist.", desired));
}

async private void InitCamera_Click(object sender, RoutedEventArgs e)
{
    var cameraID = await GetCameraID(Windows.Devices.Enumeration.Panel.Back);
    captureManager = new MediaCapture();
    await captureManager.InitializeAsync(new MediaCaptureInitializationSettings
        {
            StreamingCaptureMode = StreamingCaptureMode.Video,
            PhotoCaptureSource = PhotoCaptureSource.Photo,
            AudioDeviceId = string.Empty,
            VideoDeviceId = cameraID.Id                    
        });
}

Ответ 2

В универсальных приложениях Windows Phone 8.1 (WinRT) уже невозможно перейти непосредственно во встроенное приложение камеры и получить обратный вызов при съемке.

Для этого вам нужно реализовать Windows.Media.Capture.MediaCapture, как описано выше. Раньше он был CameraCatureUI, но он недоступен в приложениях WinRT для Windows Phone 8.1.

Однако существует "обходной путь". Вы можете использовать Windows.Storage.Pickers.FileOpenPicker и настроить его для выбора изображений. Теперь у сборщика будет кнопка камеры. Пользователь может щелкнуть по кнопке камеры, и откроется приложение для встроенной камеры. Как только пользователь сделает снимок, вы получите обратный вызов в своем приложении. Обратный вызов FileOpenPicker немного раздражает для реализации, но он работает. Если вы можете жить с последствиями юзабилити, это может быть приемлемым подходом.

В ходе конференции Microsoft по строительству-конференции в 2014 году был проведен сеанс. Вы можете смотреть сеанс онлайн по этой ссылке.

Ответ 3

Вы можете использовать подход эту ссылку. Все объясняется очень хорошо.

Просто используйте класс PhotoCamera и не забудьте включить использование камеры в манифесте приложения.