WindowsPhone

WP7 앱 개발 - 카메라 캡쳐 기능을 간단하게 구현해보기!

생각많은 소심남 2011. 11. 6. 02:04
사실 이미지를 얻는 방법은 이전 포스팅에서 언급한 것처럼 코드상에서 리소스로 활용해서 받을 수도 있고, 웹상에서 다운로드도 받아서 볼수도 있습니다만.. 가장 사용자가 이미지를 가져오기 쉬운 방법은 무엇보다도 윈폰에 내장되어 있는 카메라를 활용하는 방법이겠지요.

물론 이건 지금 포스팅으로 설명하는 것보다는 Mango Training Kit에 들어있는 Camera 파트 부분을 해보시면 이해가 더 잘가실 겁니다. 이번 파트에서는 간단한 원리와 실행을 언급해보고자 합니다.

일단 전제가 되어야 할 것은 어플리케이션 개발자는 프로그램을 통해서 카메라를 직접 제어를 할 수가 없다는 겁니다. 실질적으로 안드로이드 개발과는 조금 차이가 있지요. 안드로이드 앱중에는 도난시 원격으로 카메라를 작용하는 앱이 있지만 이같은 앱은 윈폰7에서는 볼수가 없습니다.
무엇보다 타 운영체제에 비해서 보안을 중요시 하는 이상 렌즈를 통해서 보이는 내용을 직접적으로 확인할 수 없습니다.

카메라 기능은 우선 폰 기능 중 하나 이므로 이를 활요하기 위해선 네임스페이스로 Microsoft.Phone.Task를 써야 합니다. 여기 내에서 chooser와 launcher라는 개념을 정의하고 결과의 반환 유무에 따라서 그 성격에 차이를 둡니다. 실질적으로 활용해야 될 task는 CameraCaptureTask라는 겁니다.
 일단 실버라이트로 SilverlightTapToShoot이라는 프로젝트를 만듭니다. 

그리고 content grid에 img 엘레먼트를 삽입합니다.


 .cs 파일을 다음과 같이 짭니다.

 
우선 using 지시자로 System.Windows.Media.Imaging과 Microsoft.Phone.Task 를 삽입해주고
CameraCaptureTask 를 활성화 시킵니다. 그리고 그 밑으로 세부 동작을 지정해준후
이미지를 카메라로 받은 이미지로 Source로 사용하겠다고 선언된 겁니다.

이를 실행해보면 다음과 같습니다. 

 
와 이렇게 실제로 모델링하고 보니 신기합니다. retake를 누르면 다시 찍고 원하는 부분을 클릭하면 그부분에 대한 초점을 맞추고 사진을 찍는 장면이 실제로 디버깅시 일어납니다.

물론 지금과 같이 만든 앱을 실제 폰에서도 실행시킬 수 있습니다만 폰이 pc와 zune을 통해서 연결되어 있다면 폰 자체에서 커넥트를 해제하라는 문구가 출력되기에 디버깅을 할 수 없습니다. 이같은 경우에는 zune을 끄고 WPDTPTConnect.exe라는 파일을 실행시켜서 비주얼스튜디오로 디버깅해야 됩니다. 물론 이프로그램은 다음 사이트를 참조하면 어떻게 구동시키는지 설명이 나와 있습니다.
(http://colinizer.com/2010/10/22/wpdtptconnectwpconnect-tool-in-the-windows-phone-developer-tools-october-2010-update/)

아무튼 수락을 누르면 카메라 프로그램이 종료되고 ChosenPhoto에서 입력을 받은 후 BitmapImage를 통해서 화면에 보여줍니다. 전반적으로 보면 프로그램의 구성이 참 쉬운것처럼 보이지만 책에서 언급한 바로는 이게 다가 아니랍니다.... 좀 더 내부를 들어다보면 복잡한 과정을 거친다고 합니다. 그리고 여기에는 WP7 프로그램의 구성 원리인 tombstoning 이 적용되기 때문에 개발자는 이를 고려한 프로그래밍을 해야 한다고 합니다. 아마 이부분에 대해서는 후에 다룰 듯 합니다.