본문 바로가기
놀기/C#

Camera 사용하기 (AForge 사용)

by Hi~ 2021. 7. 20.

오랜만에 Windows 프로그래밍하려니 복잡하다. 예전에는 MFC로 쉽게 만들고 했는데 세월이란 참...

 

일단, Visual Studio 2019를 설치했고 C#을 사용하기 위한 구성요소를 쭈욱 깔았다. 예전에는 금방 설치되었는데 이제 용량도 장난 아니다. 아무튼.

 

C#으로 Camera를 사용하기 위해서는 몇 가지 방법이 있는 듯한데 Windows에 기본 제공되는 카메라 UI를 사용할 수도 있고 AForge를 사용하기도 한다. 전자의 경우, https://docs.microsoft.com/ 에서 다양한 예제를 받을 수 있는데 뭔가 복잡해 보인다. 그래서, 사용한 것이 AForge다. 

 

AForge 소스코드 : https://github.com/andrewkirillov/AForge.NET

홈페이지 : http://www.aforgenet.com

 

AForge 몇 가지 샘플을 받아 빌드해 봤는데 안되는 것이 많다. 버전 문제인 듯한데 늘 있는 문제다. 그중 되는 것은 하나 골라 똑같이 만들어 보면서 확인해 보았다.

 

참조한 소스 : https://github.com/yakupcanarin/Take-Photo-in-CSharp

 

 

 


 

1) AForge 설치 (http://www.aforgenet.com/framework/downloads.html)

AForge 사이트에서 Installer를 받아 설치한다.

 

 

2) C# Project 생성

Windows Forms 어플리케이션 프로젝트를 만든다.

 

 

3) 컨트롤 배치

PictureBox, ComboBox, Button를 사용해서 아래와 같이 구성한다.

 

 

4) AForge 추가

설치한 AForge를 사용하기 위해 Project에 추가한다. "솔루션 탐색기"의 "참조"에서 오른쪽 마우스 버튼을 누르면 

 

아래와 같이 "참조 관리자"가 나온다.

 

"찾아보기"를 눌러 AForge ("AForge.Video.DirectShow.dll" "AForge.Video.dll" "AForge.Controls.dll" "AForge.dll" "AForge.Imaging.dll" "AForge.Math.dll")를 추가한다. (위치는 본인이 설치한 위치, Math 이런 거를 쓰지는 않는데 그냥 참조한 소스코드와 맞추기 위해 동일하게 했음)

 

 

5) 소스 코드 작성

AForge 설정만 하면 그냥 되기 때문에 복잡하지 않다.

 

Windows Forms이 Load/Close 될 때 Capture 설정 및 정리 작업을 한다.

private void CamTestForm_Load(object sender, EventArgs e)
{
	VideoCaptureDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
	foreach (FilterInfo device in VideoCaptureDevices) {
		comboBox.Items.Add(device);
	}
	captureDevice = new VideoCaptureDeviceForm();
	comboBox.SelectedIndex = 0;

	FinalVideo = new VideoCaptureDevice(VideoCaptureDevices[comboBox.SelectedIndex].MonikerString);
	FinalVideo.NewFrame += new NewFrameEventHandler(FinalVideo_NewFrame);
}

private void CamTestForm_FormClosing(object sender, FormClosingEventArgs e)
{
	if (FinalVideo.IsRunning == true) {
		FinalVideo.Stop();
		Application.Exit();
	}
	else {
		Application.Exit();
	}
}

 

위와 같이 하면 사실 상의 모든 코딩은 끝났다.

 

Start 버튼 - Capture가 시작되면 FinalVideo_NewFrame 이벤트가 발생하며 Capture된 이미지를 camBox에 표시한다.

private void btnStart_Click(object sender, EventArgs e)
{
	FinalVideo.Start();
}

private void FinalVideo_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
	camBox.Image = (Bitmap) eventArgs.Frame.Clone();
}

 

 

Stop 버튼 - Capture가 실행 중이면 Capture를 중지하고 pictureBox Control을 정리한다.

private void btnStop_Click(object sender, EventArgs e)
{
	if (FinalVideo.IsRunning == true) {
		FinalVideo.Stop();
		pictureBox.Image = null;
		pictureBox.Invalidate();
		camBox.Image = null;
		camBox.Invalidate();
	}
}

 

 

Snapshot 버튼 - 현재 이미지 (camBox)를 pictureBox로 복사한다.

private void btnSnapshot_Click(object sender, EventArgs e)
{
	pictureBox.Image = (Bitmap) camBox.Image.Clone();
}

 

 

6) 실행

아래와 같이 잘 실행 된다.

 

 

 

TestApp05.7z
0.01MB

댓글