2014-09-13 3 views
2

Мне известно о том, что в этом вопросе есть более повторяющиеся вопросы, но, пожалуйста, это очень важно для меня. У меня есть трудное время с инициализацией камеры Windows Phone 8.1 C#.Инициализация камеры Windows Phone 8.1

async private void InitCamera_Click(object sender, RoutedEventArgs e) 
    { 
     captureManager = new MediaCapture(); 
     await captureManager.InitializeAsync(); 

     try 
     { 
      captureManager = new Windows.Media.Capture.MediaCapture(); 
      await captureManager.InitializeAsync(); 

      if (captureManager.MediaCaptureSettings.VideoDeviceId != "" && captureManager.MediaCaptureSettings.AudioDeviceId != "") 
      { 
       System.Diagnostics.Debug.WriteLine("Init successful"); 


       captureManager.RecordLimitationExceeded += new Windows.Media.Capture.RecordLimitationExceededEventHandler(RecordLimitationExceeded); 
       captureManager.Failed += new Windows.Media.Capture.MediaCaptureFailedEventHandler(Failed); 
      } 
      else 
      { 
       System.Diagnostics.Debug.WriteLine("No Device"); 
      } 
     } 
     catch (Exception exception) 
     { 
      System.Diagnostics.Debug.WriteLine("Exception raised!!!!:" + exception); 
     } 
    } 

это мой код для инициализации камеры, но по какой-то причине он не на Windows.Media.Capture.MediaCapture() вызова конструктора с System.UnauthorizedAccessException на Lumia 920, а также нарушение прав доступа на эмуляторе. Я искал эту проблему, но ответов пока нет. Некоторые люди сказали, что я должен включить не только веб-камеру, но и микрофон, но это не решило мою проблему. Все, кажется, хорошо установлено, все доступ был предоставлен в манифесте приложения. Также я хочу спросить вас, если у вас есть хороший и рабочий пример/учебник по съемке с камерой, пожалуйста, предоставьте.

+0

почему downvote? – Citrus

ответ

7

Ниже мой код для захвата камеры, которая работает, у меня есть приложение, представленное в магазине:

private MediaCapture mediaCapture = null; 
private async Task StartCapture() 
{ 
    string error = null; 

    try 
    { 
    if (mediaCapture == null) 
    { 
     mediaCapture = new MediaCapture(); 
     mediaCapture.Failed += mediaCapture_Failed; 

     var _deviceInformation = await GetCameraDeviceInfoAsync(Windows.Devices.Enumeration.Panel.Back); 

     var settings = new MediaCaptureInitializationSettings(); 
     settings.StreamingCaptureMode = StreamingCaptureMode.Video; 
     settings.PhotoCaptureSource = PhotoCaptureSource.VideoPreview; 
     settings.AudioDeviceId = ""; 
     if (_deviceInformation != null) 
      settings.VideoDeviceId = _deviceInformation.Id; 

     await mediaCapture.InitializeAsync(settings); 

     var focusSettings = new FocusSettings(); 
     focusSettings.AutoFocusRange = AutoFocusRange.FullRange; 
     focusSettings.Mode = FocusMode.Auto; 
     focusSettings.WaitForFocus = true; 
     focusSettings.DisableDriverFallback = false; 

     mediaCapture.VideoDeviceController.FocusControl.Configure(focusSettings); 
     await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true); 

     mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees); 
     mediaCapture.SetRecordRotation(VideoRotation.Clockwise90Degrees); 
    } 

    captureReceipt.Source = mediaCapture; 
    await mediaCapture.StartPreviewAsync(); 
    } 
    catch (Exception ex) 
    { 
    DisposeMediaCapture(); 
    error = ex.Message; 
    } 

    if (error != null) 
    { 
    await (new MessageBoxImpl()).ShowMessageAsync(error); 
    } 
} 

private static async Task<DeviceInformation> GetCameraDeviceInfoAsync(Windows.Devices.Enumeration.Panel desiredPanel) 
{ 

    DeviceInformation device = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture)) 
     .FirstOrDefault(d => d.EnclosureLocation != null && d.EnclosureLocation.Panel == desiredPanel); 

    if (device == null) 
    { 
    throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "No suitable devices found for the camera of type {0}.", desiredPanel)); 
    } 
    return device; 
} 
+0

Спасибо за фрагмент, но он просто не работает. Это дало мне HResult от -2147024891, никакого внутреннего исключения и до сих пор доступ запрещен с System.UnauthorizedAccessException:/ – Citrus

+0

@ LászlóCitrusNagy также в манифесте пакета я установил возможность веб-камеры, но, я думаю, вы это сделали и ... – Jogy

+1

Вы можете также загрузите примерный код для «Building Apps для Windows Phone 8.1 Jump Start»: https://onedrive.live.com/?cid=b36de4dd5a9179a1&id=B36DE4DD5A9179A1%2193175&ithint=folder,.zip&authkey=!APluMWf01e3WvqA Ищите сеанс 17, речь идет о камере – Jogy