Education/Bit 18th
[Windows Mobile] Lab1 - Taking Picture with the Camera
by ★용호★
2009. 12. 6.
Windows Mobile in C# 강좌
Lab 1 - Taking Picture with the Camera
Windows Mobile in C#
- 본 강좌는 Windows Mobile 6 세미나의 자료를 기반으로 제작 하였습니다.
- Microsoft Visual Studio 2008 C# / Windows Mobile 6 Professional SDK
1 Lab 1 - Taking Picture with the Camera ¶
- 이번 Windows Mobile in C#의 첫번째 시간에는 Camera Device 와 사진을 사용하는 방법 입니다.
2.1.1 Main Form 생성 ¶
- Visual Studio 2008 C# 프로젝트를 생성 후, 기본 네임 스페이스 설정을 "MobilityMetro2009" 로 변경 합니다.
- Main이 되는 Form 임을 명시 하기 위해 Defualt 생성되는 Form 네임을 MainForm.cs로 변경 합니다.
- "Form1.cs" -> "MainForm.cs"
- MainForm의 Text 속성을 "MobilityMetro2009"로 변경 합니다. (Main Form의 Title Bar의 Text 입니다.)
2.1.2 Main Form Menu ¶
- 메인 폼의 메뉴를 설정 합니다.
- 왼쪽 하단 메뉴의 Text는 "종료"로 입력하고, 메뉴 Name는 "MnuExit"로 입력 합니다.
- 오른쪽 하단 메뉴의 Text는 "옵션"으로 입력하고, 메뉴 Name는 "MnuOptions"으로 입력 합니다.
- 옵션 메뉴의 하위 메뉴를 아래와 같이 추가 합니다.
2.2 FormMyActivities Form - "GPS 이동경로" ¶
2.2.1 FormMyActivities Form 생성 ¶
- "GPS 이동경로" Form을 만들기 위해 프로젝트에서 새 폼을 "FormMyActivities.cs" 이름으로 추가 합니다.
- Form Text를 "GPS 이동경로" 로 변경.
2.2.2 FormMyActivities Form 메뉴 ¶
- 왼쪽 하단 메뉴의 Text는 "뒤로"로 입력하고, 메뉴 Name는 "MnuBack"로 입력 합니다.
- 오른쪽 하단 메뉴의 Text는 "이동경로 추가"으로 입력하고, 메뉴 Name는 "MnuAddActivity"으로 입력 합니다.
2.3 FormAddActivity Form - "이동경로 추가" ¶
2.3.1 FormAddActivity Form 생성 ¶
- FormAddActivity Form을 만들기 위해 프로젝트에서 새 폼을 "FormAddActivity.cs" 이름으로 추가 합니다.
- Form Text를 "이동경로 추가" 로 변경.
2.3.2 FormAddActivity Form 메뉴 ¶
- 왼쪽 하단 메뉴의 Text는 "뒤로"로 입력하고, 메뉴 Name는 "MnuBack"로 입력 합니다.
- 오른쪽 하단 메뉴의 Text는 "옵션"으로 입력하고, 메뉴 Name는 "MnuOptions"으로 입력 합니다.
- 옵션 메뉴의 하위 메뉴를 다음과 같이 설정 합니다. Text는 "사진 가져오기", Name은 "MnuTakePicture"로 설정 합니다.
2.3.3 FormAddActivity Form 메뉴 ¶
- "도구상자" Panel Control을 더블 클릭하여 폼 안에 생성합니다.
- Panel Control의 Name 속성을 "picPanel"로 설정하고, Dock 속성을 "Top"으로 설정 합니다.
- "picPanel" Panel 안에 PictureBox Control을 더블 클릭하여 삽입 합니다.
- PictureBox의 Name 속성을 "picPhoto"로 설정하고, Dock 속성을 "Left", SizeMode 속성을 "StretchImage"로 설정 합니다.
- PictureBox의 Image 경로를 해당 프로젝트 루트안의 "Resources/NoPicture.jpg" 이미지로 설정 합니다.
- "picPanel" Panel 안에 TextBox Control을 더블 클릭하여 삽입 합니다.
- 삽입한 TextBox의 Name 속성을 "TxtGPSInfo"로 설정하고, Dock 속성을 "Fill", Multiline 속성을 "True"로 설정 합니다.
- 폼안에 Panel Control을 더블클릭하여 추가 합니다.
- Panel Control의 Name 속성을 "commentsPanel"로 설정하고, Dock 속성을 "Bottom"으로 설정 합니다.
- "commentsPanel" Panel 안에 Lable Control을 더블 클릭하여 삽입 합니다.
- Lable Control의 Dock 속성을 "Top"으로 설정하고, Text 속성을 "Comment : "로 설정 합니다.
- "commentsPanel" Panel 안에 TextBox Control을 더블 클릭하여 삽입 합니다.
- 삽입한 TextBox의 Name 속성을 "txtComment"로 설정하고, Dock 속성을 "Fill", Multiline 속성을 "True"로 설정 합니다.
3 참조 추가 ¶
- 사진과 카메라 디바이스를 사용, 그리고 상태를 확인하기 위해 아래의 참조와 "PlatformInformationHelper.cs" 파일을 추가 합니다.
- Microsoft.WindowsMobile
- Microsoft.WindowsMobile.Forms
- Microsoft.WindowsMobile.Status
- "PlatformInformationHelper.cs" 파일은 해당 프로젝트 루트안의 "/Resources"에 위치하고 아래 그림과 같이 추가 합니다.
4.1 Main Form ¶
- 메인 폼은 하단 메뉴의 코드를 작성 합니다.
- 이번 Lab 에서는 사진과 카메라 사용에 대한 강좌 이므로 해당 기술을 사용하는 "GPS 이동경로" 메뉴에 대한 코딩을 설명 하겠습니다.
- "종료" 메뉴를 더블 클릭하면 메뉴에 대한 이벤트 처리를 할 수 있는 코드 화면으로 이동 합니다. 아래의 종료 Code를 입력 합니다.
- 종료 이벤트를 정의 합니다.
- "옵션" 메뉴의 하위 메뉴인 "GPS 이동경로"에 대한 클릭 이벤트 처리를 아래와 같이 입력 합니다.
- "GPS 이동경로" 폼으로 이동하는 코드와 예외 처리 코드를 입력 합니다.
try {
MobilityMetro2009.FormMyActivities f = new MobilityMetro2009.FormMyActivities();
f.Show();
} catch (Exception ex){
throw ex;
} |
4.2 FormMyActivities Form ¶
- "뒤로" 메뉴의 클릭 이벤트 처리 코드를 입력 아래와 같이 입력 합니다.
- "이동경로 추가" 메뉴의 클릭 이벤트 처리 코드를 아래와 같이 입력합니다.
FormAddActivity f = new FormAddActivity();f.Show(); |
4.3 FormAddActivity Form ¶
- FormAddAcivity.cs 에 using 선언문을 아래와 같이 추가 합니다.
using Microsoft.WindowsMobile.Forms;
using Microsoft.WindowsMobile.Status;
using System.IO; |
- "뒤로" 메뉴의 이벤트 처리 코드를 입력 아래와 같이 입력 합니다.
- 이미지 리소스 사용의 해제를 처리 합니다.
picPhoto.Image.Dispose(); // picPhoto.Image의 리소스 해제.
picPhoto.Image = null;
this.Close(); |
- "옵션"의 하위 메뉴인 "사진 가져오기"에 대한 클릭 이벤트 처리를 아래와 같이 합니다.
if (SystemState.CameraPresent == true && PlatformInformation.IsEmulator() == false)
{
CameraCaptureDialog ccd = new CameraCaptureDialog();
ccd.Mode = CameraCaptureMode.Still; // Camera Device 모드 선택.
ccd.StillQuality = CameraCaptureStillQuality.High; // Camera Device 사진 퀄리티 선택.
ccd.Title = "Tack Picture.";
DialogResult dr = ccd.ShowDialog();
if (dr == DialogResult.OK && ccd.FileName != string.Empty && File.Exists
(ccd.FileName) == true)
{
picPhoto.Image = new Bitmap(ccd.FileName);
}
ccd.Dispose(); // ccd에 사용된 리소스 해제.
} else {
SelectPictureDialog ssdn = new SelectPictureDialog();
DialogResult dr = ssdn.ShowDialog(); // 썸네일 방식의 사진 목록
if (dr == DialogResult.OK && ssdn.FileName != string.Empty && File.Exists
(ssdn.FileName) == true)
{
picPhoto.Image = new Bitmap(ssdn.FileName);
}
ssdn.Dispose(); // ssdn에 사용된 리소스 해제.
} |
- 여기서는 Windows Mobile Camera API인 CameraCaptureDialog를 사용하였습니다. CameraCaptureMode에는 일반 사진 촬영모드인 Still과 동영상 촬영모드인 VideoOnly, VideoWithAudio로 나뉘어 집니다.
- 또한 InitialDirectory를 이용하여 사진 저장 경로를 지정할 수 있습니다.
ccd.InitialDirectory = @"저장경로"; // 저장경로 지정. |
- SelectPictureDialog 는 촬영한 사진 목록을 썸네일 방식으로 볼 수 있게 합니다.
5.1 Emulator 실행 결과 ¶
- Emulator 에서 실행한 결과 화면은 아래와 같습니다.
댓글