본문 바로가기
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 Form 생성

2.1 Main From

2.1.1 Main Form 생성

  • Visual Studio 2008 C# 프로젝트를 생성 후, 기본 네임 스페이스 설정을 "MobilityMetro2009" 로 변경 합니다.

    11.JPG



  • Main이 되는 Form 임을 명시 하기 위해 Defualt 생성되는 Form 네임을 MainForm.cs로 변경 합니다.
  • "Form1.cs" -> "MainForm.cs"

    12.JPG


  • MainForm의 Text 속성을 "MobilityMetro2009"로 변경 합니다. (Main Form의 Title Bar의 Text 입니다.)
    15.JPG


2.1.2 Main Form Menu

  • 메인 폼의 메뉴를 설정 합니다.
  • 왼쪽 하단 메뉴의 Text는 "종료"로 입력하고, 메뉴 Name는 "MnuExit"로 입력 합니다.
  • 오른쪽 하단 메뉴의 Text는 "옵션"으로 입력하고, 메뉴 Name는 "MnuOptions"으로 입력 합니다.
  • 옵션 메뉴의 하위 메뉴를 아래와 같이 추가 합니다.

    16.JPG
    17.JPG


2.2 FormMyActivities Form - "GPS 이동경로"

2.2.1 FormMyActivities Form 생성

  • "GPS 이동경로" Form을 만들기 위해 프로젝트에서 새 폼을 "FormMyActivities.cs" 이름으로 추가 합니다.
  • Form Text를 "GPS 이동경로" 로 변경.

    13.JPG
    14.JPG


2.2.2 FormMyActivities Form 메뉴

  • 왼쪽 하단 메뉴의 Text는 "뒤로"로 입력하고, 메뉴 Name는 "MnuBack"로 입력 합니다.
  • 오른쪽 하단 메뉴의 Text는 "이동경로 추가"으로 입력하고, 메뉴 Name는 "MnuAddActivity"으로 입력 합니다.

    18.JPG


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"로 설정 합니다.

    19.JPG


2.3.3 FormAddActivity Form 메뉴

  • "도구상자" Panel Control을 더블 클릭하여 폼 안에 생성합니다.
  • Panel Control의 Name 속성을 "picPanel"로 설정하고, Dock 속성을 "Top"으로 설정 합니다.

    20.JPG


  • "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"로 설정 합니다.

    21.JPG


3 참조 추가

  • 사진과 카메라 디바이스를 사용, 그리고 상태를 확인하기 위해 아래의 참조와 "PlatformInformationHelper.cs" 파일을 추가 합니다.

    • Microsoft.WindowsMobile
    • Microsoft.WindowsMobile.Forms
    • Microsoft.WindowsMobile.Status

      22.JPG


  • "PlatformInformationHelper.cs" 파일은 해당 프로젝트 루트안의 "/Resources"에 위치하고 아래 그림과 같이 추가 합니다.

    23.JPG


4 Source Code

4.1 Main Form

  • 메인 폼은 하단 메뉴의 코드를 작성 합니다.
  • 이번 Lab 에서는 사진과 카메라 사용에 대한 강좌 이므로 해당 기술을 사용하는 "GPS 이동경로" 메뉴에 대한 코딩을 설명 하겠습니다.

  • "종료" 메뉴를 더블 클릭하면 메뉴에 대한 이벤트 처리를 할 수 있는 코드 화면으로 이동 합니다. 아래의 종료 Code를 입력 합니다.
  • 종료 이벤트를 정의 합니다.

this.Close();   

  • "옵션" 메뉴의 하위 메뉴인 "GPS 이동경로"에 대한 클릭 이벤트 처리를 아래와 같이 입력 합니다.
  • "GPS 이동경로" 폼으로 이동하는 코드와 예외 처리 코드를 입력 합니다.

try

{
MobilityMetro2009.FormMyActivities f = new MobilityMetro2009.FormMyActivities();
f.Show();
} catch (Exception ex){
throw ex;
}

 

4.2 FormMyActivities Form

  • "뒤로" 메뉴의 클릭 이벤트 처리 코드를 입력 아래와 같이 입력 합니다.
this.Close();

  • "이동경로 추가" 메뉴의 클릭 이벤트 처리 코드를 아래와 같이 입력합니다.

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 실행 결과

5.1 Emulator 실행 결과

  • Emulator 에서 실행한 결과 화면은 아래와 같습니다.

    26.JPG


    25.JPG

댓글