내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8에서 하드웨어 카메라 셔터 버튼에 액세스하는 방법

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

Windows Phone OS 7.1 부터는 앱에서 휴대폰에 있는 하드웨어 셔터 버튼에 프로그래밍 방식으로 액세스할 수 있습니다. 이 항목에서는 앱에서 이 기능을 구현하는 방법을 보여 줍니다. Microsoft.Devices.PhotoCamera 또는 PhotoCaptureDevice 클래스를 사용하는 카메라 앱에서 하드웨어 셔터 버튼을 사용하여 카메라 센서에 액세스할 수 있습니다. 이 항목은 Windows Phone 8용 기본 카메라 앱을 만드는 방법에서 연결되며 해당 항목에서 기본 카메라 프로젝트를 만들었다는 가정 하에 작성되었습니다.

팁팁:

Windows Phone 8 부터 앱에서는 고급 캡처 시나리오에 대해 PhotoCaptureDevice 클래스를 사용할 수 있습니다. PhotoCaptureDevice를 사용하여 ISO, 노출 보정 및 수동 초점 위치(휴대폰에서 사용 가능한 경우) 등의 사진 속성을 제어할 수 있습니다. 이 항목에서는 PhotoCaptureDevice에 대해 설명하지 않습니다. 이 클래스에 대한 자세한 내용은 Windows Phone 8의 고급 사진 캡처를 참조하세요.

이 항목은 기본 카메라 샘플에 해당합니다.

하드웨어 셔터 버튼 액세스는 다음 표에 설명된 대로 CameraButtons 클래스에 있는 일련의 이벤트를 통해 관리됩니다.

이벤트

설명

ShutterKeyHalfPressed

셔터 버튼을 약 800밀리초 동안 길게 누르는 경우. 이 이벤트를 트리거하지 않는 것보다 더 빠른 절반만 누르기.

ShutterKeyPressed

셔터 버튼을 끝까지 누르는 경우.

ShutterKeyReleased

셔터 버튼을 놓는 경우.

이 이벤트는 사진이나 동영상을 캡처하는 데 사용할 수 있습니다. 동영상을 캡처할 때 Start 메서드는 하드웨어 셔터 버튼 누름보다 먼저 호출되어야 합니다. 캡처 원본이 시작되지 않은 경우에는 이 이벤트가 발생하지 않습니다. Windows Phone 응용프로그램의 동영상 캡처에 대한 자세한 내용은 Windows Phone 8용 카메라 앱에서 동영상을 녹화하는 방법를 참조하세요.

참고참고:

앞의 연습에서 소프트웨어 셔터와 자동 초점 버튼은 PhotoCamera API에 대한 프로그래밍 방식의 액세스를 보여 주기 위해 사용되었습니다. 최종 사용자 환경을 최적화하려면 앱에서 자동 초점 및 셔터 작업에 대해 카메라의 하드웨어 셔터 버튼을 사용하는 것이 좋습니다.

이 섹션에서는 다음 앱 동작을 수행하도록 이 이벤트를 구현합니다.

  • 셔터 버튼을 끝까지 누르면 이미지가 캡처되고 미디어 라이브러리에 저장됩니다.

  • 셔터 버튼을 절반만 누르면 카메라 자동 초점이 시작됩니다.

  • 셔터 버튼을 놓으면 자동 초점이 취소됩니다.

하드웨어 셔터 버튼을 구현하려면

  1. Windows Phone 8용 기본 카메라 앱을 만드는 방법에서 만든 기본 카메라 프로젝트를 엽니다.

  2. 기본 페이지의 코드 숨김 파일 MainPage.xaml.cs를 열고 OnNavigatedTo(NavigationEventArgs) 메서드에 다음 코드를 추가합니다.

        // The event is fired when the shutter button receives a half press.
        CameraButtons.ShutterKeyHalfPressed += OnButtonHalfPress;
    
        // The event is fired when the shutter button receives a full press.
        CameraButtons.ShutterKeyPressed += OnButtonFullPress;
    
        // The event is fired when the shutter button is released.
        CameraButtons.ShutterKeyReleased += OnButtonRelease;
    
    
  3. MainPage.xaml.cs에서 Dispose 메서드를 호출한 후 OnNavigatingFrom(NavigatingCancelEventArgs) 메서드에 다음 코드를 추가합니다. 이 코드를 통해 카메라에 관련된 메모리를 해제할 수 있습니다.

        CameraButtons.ShutterKeyHalfPressed -= OnButtonHalfPress;
        CameraButtons.ShutterKeyPressed -= OnButtonFullPress;
        CameraButtons.ShutterKeyReleased -= OnButtonRelease;
    
    
  4. MainPage.xaml.cs에서 MainPage 클래스에 다음 코드를 추가합니다.

            // Provide auto-focus with a half button press using the hardware shutter button.
            private void OnButtonHalfPress(object sender, EventArgs e)
            {
                if (cam != null)
                {
                    // Focus when a capture is not in progress.
                    try
                    {
                        this.Dispatcher.BeginInvoke(delegate()
                        {
                            txtDebug.Text = "Half Button Press: Auto Focus";
                        });
    
                        cam.Focus();
                    }
                    catch (Exception focusError)
                    {
                        // Cannot focus when a capture is in progress.
                        this.Dispatcher.BeginInvoke(delegate()
                        {
                            txtDebug.Text = focusError.Message;
                        });
                    }
                }
            }
    
            // Capture the image with a full button press using the hardware shutter button.
            private void OnButtonFullPress(object sender, EventArgs e)
            {
                if (cam != null)
                {
                    cam.CaptureImage();
                }
            }
    
            // Cancel the focus if the half button press is released using the hardware shutter button.
            private void OnButtonRelease(object sender, EventArgs e)
            {
    
                if (cam != null)
                {
                    cam.CancelFocus();
                }
            }
    
    

    이 코드는 이러한 이벤트 처리기를 사용하여 PhotoCamera 클래스의 Focus(), CaptureImage()CancelFocus() 메서드를 호출합니다.

    참고참고:

    하드웨어 셔터 버튼에서 사용하도록 설정되면 기본 제공 카메라 환경과 맞추기 위해 자동 초점이 짧은 시간 간격 동안 지연됩니다.

  5. 휴대폰에서 디버그 | 디버깅 시작 메뉴 명령을 선택하여 앱을 실행합니다.

표시:
© 2015 Microsoft