web-dev-qa-db-fra.com

Capture de photos sur Windows Store App pour Windows Phone

Eh bien, ma question est simple:
Comment capturer des images avec un Windows Store App pour Windows Phone 8.1 à l'aide de l'appareil photo?
Les exemples sur MSDN utilisent Windows.Media.Capture.CameraCaptureUI, qui ne peut pas être utilisé sur Windows Phone ou sur Silverlight.
Je ne trouve aucun document ni échantillon spécifique à l'application Windows Phone utilisant Windows Runtime.
Si quelqu'un sait ou a même le doc pour cela, je serais heureux.

18
GlorfSf

Dans WP8.1 Runtime (également dans Silverlight), vous pouvez utiliser MediaCapture . En bref:

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

Si vous avez besoin d'un aperçu, vous pouvez utiliser un CaptureElement

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

Ensuite, dans le code suivant, vous pouvez démarrer/arrêter la prévisualisation de la manière suivante:

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

Enfin, pour prendre une photo, vous pouvez par exemple l’envoyer directement dans un fichier CapturePhotoToStorageFileAsync ou dans un flux 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);

Si vous voulez capturer une vidéo, alors voici plus d’informations .

N'oubliez pas non plus d'ajouter Webcam dans Capabilities de votre fichier de manifeste et Front/Rear Camera dans Requirements.


Si vous devez choisir une caméra (avant/arrière), vous devrez obtenir l’ID de la caméra, puis initialiser MediaCapture avec les paramètres souhaités:

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

Dans les applications universelles Windows Phone 8.1 (WinRT), il n'est plus possible de sauter directement dans l'application pour appareil photo intégré et de recevoir un rappel lorsqu'une photo a été prise.

Pour ce faire, vous devez implémenter Windows.Media.Capture.MediaCapture comme décrit ci-dessus. Il existait auparavant CameraCatureUI mais il n’est pas disponible dans les applications WinRT pour Windows Phone 8.1.

Cependant, il existe une "solution de contournement". Vous pouvez utiliser Windows.Storage.Pickers.FileOpenPicker et le configurer pour choisir des images. Maintenant, le sélecteur aura un bouton de caméra. L'utilisateur peut cliquer sur le bouton de la caméra pour ouvrir l'application de la caméra intégrée. Une fois que l'utilisateur a pris une photo, vous recevez un rappel dans votre application. Le callback FileOpenPicker est un peu ennuyeux à implémenter, mais cela fonctionne. Si vous pouvez vivre avec les implications en termes de convivialité, cela pourrait être une approche valable.

Il y a eu une session sur ce sujet lors de la conférence de construction Microsofts en 2014. Vous pouvez regarder la session en ligne avec ce lien.

3
RhodanV5500

Vous pouvez prendre l'approche sur this link. Tout est expliqué très bien.

Utilisez simplement la classe PhotoCamera et n'oubliez pas d'activer l'utilisation de la caméra dans le manifeste de votre application.