2013-03-14 7 views
10

Ich zeige den Kamera-Feed in meiner Windows Store App mit dem CaptureElement an. Jetzt möchte ich ein Foto als Stream aufnehmen, wenn der Benutzer auf den Bildschirm tippt, den ich mit dem unten stehenden Code bearbeitet habe. Leider hat das zurückgegebene Bild nur eine Auflösung von 640 x 360, aber die Kamera (Surface RT) kann Bilder mit 1280x800 aufnehmen, was ich gerne machen würde.Foto mit benutzerdefinierter Auflösung von CaptureElement mit MediaCapture aufnehmen

versuchte ich

 encodingProperties.Height = 800; 
     encodingProperties.Width = 1280; 

Einstellung, aber das hat nicht funktioniert. Wie ändere ich die Auflösung?

private async void captureElement_Tapped(object sender, TappedRoutedEventArgs e) 
    { 
     var encodingProperties = ImageEncodingProperties.CreateJpeg(); 
     //encodingProperties.Height = 800; 
     //encodingProperties.Width = 1280; 
     WriteableBitmap wbmp; 

     using (var imageStream = new InMemoryRandomAccessStream()) 
     { 
      await captureMgr.CapturePhotoToStreamAsync(encodingProperties, imageStream); 
      await imageStream.FlushAsync(); 
      imageStream.Seek(0); 
      wbmp = await new WriteableBitmap(1, 1).FromStream(imageStream); 
     } 

     capturedImage.Source = wbmp; 
    } 

Antwort

15

So endlich herausgefunden ich, wie durch diese zu kommen und zu der gefürchteten „HRESULT: 0xC00D36B4“ get auch loswerden Fehler, zum Teil dank der Code hier: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/751b8d83-e646-4ce9-b019-f3c8599e18e0

Ich machte einige Anpassungen, deshalb habe ich hier meinen Code

umbuchen
MediaCapture mediaCapture; 
    DeviceInformationCollection devices; 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     devices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); 
     this.mediaCapture = new MediaCapture(); 
     if (devices.Count() > 0) 
     { 
      await this.mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings { VideoDeviceId = devices.ElementAt(1).Id, PhotoCaptureSource = Windows.Media.Capture.PhotoCaptureSource.VideoPreview }); 
      SetResolution(); 
     } 
    } 


    //This is how you can set your resolution 
    public async void SetResolution() 
    { 
     System.Collections.Generic.IReadOnlyList<IMediaEncodingProperties> res; 
     res = this.mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.VideoPreview); 
     uint maxResolution = 0; 
     int indexMaxResolution = 0; 

     if (res.Count >= 1) 
     { 
      for (int i = 0; i < res.Count; i++) 
      { 
       VideoEncodingProperties vp = (VideoEncodingProperties)res[i]; 

       if (vp.Width > maxResolution) 
       { 
        indexMaxResolution = i; 
        maxResolution = vp.Width; 
        Debug.WriteLine("Resolution: " + vp.Width); 
       } 
      } 
      await this.mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, res[indexMaxResolution]); 
     } 
    } 

Obwohl Fotos zu machen, stellen Sie sicher, dass Sie immer mit .VideoPreview arbeiten, nicht .PHOTO!

+1

danke, ich habe danach gesucht, funktioniert super! – Chin

+0

nach dieser Oberfläche beginnt Pro 2 nacheilend. – Yawar

+0

Diese Methode funktioniert nicht mit Fotoaufnahmen – gayan1991

Verwandte Themen