it-swarm.com.ru

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

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

18
GlorfSf

В 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.


В случае, если вам нужно выбрать камеру (вперед/назад), вам нужно будет получить идентификатор камеры и затем инициализировать 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                    
        });
}
48
Romasz

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

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

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

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

3
RhodanV5500

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

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

0
Ivan Crojach Karačić