2012-04-17 2 views
1

바코드를 처리하기 위해 자동 초점 기능을 사용하여 기본 카메라 앱을 작성하려고합니다. 카메라가 초점을 맞춘 상태에서 뒤로 누를 경우 빈 화면이 나타나고 그냥 멈추게됩니다. 아무 예외도 발생하지 않습니다. 문제를 CaptureImage() 메서드로 추적했지만 호출되는 것을 볼 수 있지만 OnCaptureImageAvailable 메서드는 호출되지 않습니다. OnNavigatedFrom 메서드에서 OnCaptureImageAvailable을 해제하지 않은 경우에도 이러한 상황이 발생합니다.WP7 카메라 CaptureImage가 사진을 찍을 때 등을 눌렀을 때 돌아 가지 않습니다.

protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     base.OnNavigatedFrom(e); 
     _camera.AutoFocusCompleted -= OnCameraAutoFocusCompleted; 
     _camera.CaptureImageAvailable -= OnCaptureImageAvailable; 
     _camera.Initialized -= OnCameraInitialized; 
     _camera.Dispose(); 
     _camera = null; 
    } 

    private void InitializeCamera() 
    { 
     _camera = new PhotoCamera(); 
     _camera.Initialized += OnCameraInitialized; 
     viewfinderBrush.SetSource(_camera); 
    } 

    void OnCameraInitialized(object sender, EventArgs e) 
    { 
     _camera.Initialized -= OnCameraInitialized; 
     _camera.AutoFocusCompleted += OnCameraAutoFocusCompleted; 
     _camera.CaptureImageAvailable += OnCaptureImageAvailable; 

     _camera.FlashMode = FlashMode.Off; 
     _camera.Focus(); 
    } 

    private void OnCameraAutoFocusCompleted(object sender, EventArgs e) 
    { 
     _camera.CaptureImage(); 
    } 

    private void OnCaptureImageAvailable(object sender, ContentReadyEventArgs e) 
    { 
     if (_camera != null && e.ImageStream != null) 
      ScanBarcode(e); 
    } 

답변

0

"_camera.CaptureImage();"에서 이미지를 캡처하는 중 카메라를 사용중인 상태에서 이전 페이지로 이동하여 카메라를 폐기하는 것이 문제입니다.

"doBack"및 "captureCompleted"라는 두 개의 부울 플래그를 유지하는 방법은 어떻습니까? captureCompleted가 설정되지 않는 한 doBack 플래그를 설정 한 뒤 키를 누르면

private void OnCameraAutoFocusCompleted(object sender, EventArgs e) 
    { 
     _camera.CaptureImage(); 
    } 

을 무시 :

그런 다음 OnCameraAutoFocusCompleted 이벤트가 트리거 할 때 돌아 가지 않는다

다음
protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e) 
    { 
     if (!captureCompleted) 
     { 
      this.doBack = true; 
      e.Cancel = true; 
     } 

     base.OnBackKeyPress(e); 
    } 

, OnBackup 플래그가 설정되면 OnCameraCaptureCompleted 이벤트가 트리거 될 때 captureCompleted 플래그를 다음과 같이 설정하여 이전 페이지로 이동하고 카메라를 폐기하십시오.

private void OnCameraCaptureCompleted(object sender, EventArgs e) 
    { 
     this.captureCompleted = true; 

     if (doBack) 
     { 
      this.Dispatcher.BeginInvoke(delegate() 
      { 
       NavigationService.GoBack(); 
      }); 
     } 
    } 
0

나는 당신의 OnNavigatedFrom에 viewfinderBrush의 소스를 삭제하려고 할 것입니다.

_camera도 삭제하고 도움이되는지 확인해보십시오.

+0

OnNavigateFrom에서 _camera.Dispose()를 제거하면 호출 페이지로 돌아가지만이 페이지를 다시 열 수 없습니다. 카메라가 초기화 될 준비가되지 않은 것 같습니다. 문제를 설명하기 위해 프로젝트를 업로드했습니다 :'https : // github.com/cobusbernard/CameraIssue /'. –

관련 문제