Photo capture on Windows Store App for Windows Phone

后端 未结 3 401
遇见更好的自我
遇见更好的自我 2020-11-29 01:04

Well, my question is simple:
How do I capture pictures with a Windows Store App for Windows Phone 8.1, using the camera?
The samples on MSD

3条回答
  •  情书的邮戳
    2020-11-29 01:35

    In WP8.1 Runtime (also in Silverlight) you can use MediaCapture. In short:

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

    If you need a preview you can use a CaptureElement:

    // In XAML: 
    
    

    Then in the code behind you can start/stop previewing like this:

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

    Finally to take a Photo you can for example take it directly to a file CapturePhotoToStorageFileAsync or to a Stream 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);
    

    If you want to capture video then here is more information.

    Also don't forget to add Webcam in Capabilities of your manifest file, and Front/Rear Camera in Requirements.


    In case you need to choose a Camera (fornt/back), you will need to get the Camera Id and then initialize MediaCapture with desired settings:

    private static async Task 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                    
            });
    }
    

提交回复
热议问题