wake-up-neo.com

Fotoaufnahme in der Windows Store App für Windows Phone

Nun, meine Frage ist einfach:
Wie kann ich mit der Kamera Bilder mit einem Windows Store App für Windows Phone 8.1 aufnehmen?
Die Beispiele in MSDN verwenden Windows.Media.Capture.CameraCaptureUI, der unter Windows Phone nicht verwendet werden kann oder für Silverlight.
Ich kann keine Dokumente oder Beispiele finden, die speziell für die Windows Phone-App mit Windows Runtime geeignet sind.
Wenn jemand weiß oder auch nur den Doc dafür hat, würde ich mich freuen.

18
GlorfSf

In WP8.1 Runtime (auch in Silverlight) können Sie MediaCapture verwenden. Zusamenfassend:

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

Wenn Sie eine Vorschau benötigen, können Sie ein CaptureElement verwenden: 

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

Dann können Sie im Code dahinter die Vorschau wie folgt starten/stoppen:

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

Um ein Foto aufzunehmen, können Sie es zum Beispiel direkt in eine Datei CapturePhotoToStorageFileAsync oder in einen Stream CapturePhotoToStreamAsync aufnehmen:

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);

Wenn Sie ein Video aufnehmen möchten, dann hier weitere Informationen .

Vergessen Sie auch nicht, Webcam in Capabilities Ihrer Manifestdatei und Front/Rear Camera in Requirements hinzuzufügen.


Falls Sie eine Kamera (Vorder-/Rückseite) auswählen müssen, müssen Sie die Kamera-ID abrufen und anschließend MediaCapture mit den gewünschten Einstellungen initialisieren:

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

In universellen Windows Phone 8.1-Apps (WinRT) ist es nicht mehr möglich, direkt in die integrierte Kamera-App zu springen und einen Rückruf zu erhalten, wenn ein Foto aufgenommen wurde.

Dazu müssen Sie Windows.Media.Capture.MediaCapture wie oben beschrieben implementieren. Früher gab es CameraCatureUI, aber es ist in WinRT-Apps für Windows Phone 8.1 nicht verfügbar.

Es gibt jedoch eine "Problemumgehung". Sie können Windows.Storage.Pickers.FileOpenPicker verwenden und so konfigurieren, dass Bilder ausgewählt werden. Der Picker hat jetzt eine Kamera-Taste. Der Benutzer kann auf die Kamera-Schaltfläche klicken und die integrierte Kamera-App wird geöffnet. Sobald der Benutzer ein Foto aufgenommen hat, erhalten Sie einen Rückruf in Ihrer App. Der FileOpenPicker-Callback ist etwas umständlich zu implementieren, funktioniert aber. Wenn Sie mit den Auswirkungen auf die Benutzerfreundlichkeit leben können, ist dies möglicherweise ein gültiger Ansatz.

Während der Microsofts Build-Conference im Jahr 2014 gab es eine Sitzung zu diesem Thema. Sie können die Sitzung online über diesen Link verfolgen.

3
RhodanV5500

Sie können den Ansatz auf this link nehmen. Alles ist sehr schön erklärt.

Verwenden Sie einfach die PhotoCamera-Klasse und vergessen Sie nicht, die Verwendung der Kamera in Ihrem App-Manifest zu aktivieren