본문으로 바로가기

VFW(video for window)는 동영상 압축 관리자(VCM)라고도 하며,

마이크로소프트 윈도가 디지털 비디오를 재생하게끔 하는 마이크로소프트가 개발한 멀티미디어 프레임워크였다.

 

기본적으로 vfw라이브러리가 추가 되어 있지 않아 링킹을 걸수 없어 라이브러리 파일을 추가해야 한다.

 

자동셋팅하는 방법

제목 없음

메뉴에 project로 가서 settings를 클릭한다.

 

1

위처럼 창이 뜨는데 Link목록으로 간다.

그럼 Object… modules이란 에디트 영역 제일 끝으로 가서 한칸 띄우고 아래와 같이 입력한다.

 2 

ok를 눌러주면 끝!

 

 

수동셋팅하는 방법

 

간단하게 #include를 선언 후

#include <vfw.h>        //video for window

아래와 같이 플라그마 comment(lib.”파일명”)을 입력하면 된다.

#pragma comment(lib,"vfw32.lib")        //수동으로 라이브러리 추가 작업

 

이제부터 영상처리를 할 것인데

기본적인 WinMain을 입력하고 WndProc에서 메시지 처리를 한다.

 

  1: #include <windows.h>
  2: #include <vfw.h>		//video for window
  3: 
  4: #pragma comment(lib,"vfw32.lib")	//수동으로 라이브러리 추가 작업
  5: 
  6: HBITMAP HBm;
  7: BITMAPINFO BInfo;
  8: HWND hVfw;
  9: 
 10: /* 고정 형식 */
 11: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);	//메시지 처리 함수
 12: BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
 13: 
 14: HINSTANCE g_hInst;	//instance 전역 선언
 15: LPCTSTR lpszClass = TEXT("First");	//윈도클래스 이름 정의
 16: 
 17: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
 18: 					 LPSTR lpszCmdParam, int nCmdShow)	//시작점 
 19: {
 20: 	HWND hWnd;
 21: 	MSG Message;	//MSG 구조체 사용
 22: 	WNDCLASS WndClass;	//WNDCLASS 구조체 사용
 23: 	g_hInst=hInstance;	//이 윈도클래스를 등록하는 프로그램의 번호
 24: 
 25: 	/*WndClass 정의(윈도우의 기반이 되는 클래스를 정의한다. 즉, 만들고자 하는 윈도우의 속성을 정의)*/
 26: 	WndClass.cbClsExtra = 0;	//예약 영역, 사용하지 않을 경우 0으로 지정
 27: 	WndClass.cbWndExtra = 0;	//예약 영역
 28: 	WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);	//윈도우의 배경 색상을 지정
 29: 	WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);	//윈도우가 사용할 커서를 지정
 30: 	WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);//윈도우가 사용할 아이콘을 지정
 31: 	WndClass.hInstance = hInstance;
 32: 	WndClass.lpfnWndProc = WndProc;	//윈도우의 메시지 처리함수를 지정
 33: 	WndClass.lpszClassName = lpszClass;	//윈도우 클래스의 이름을 문자열로 정의
 34: 	WndClass.lpszMenuName = NULL;	//프로그램이 사용할 메뉴를 지정(여기선 메뉴 사용 안함)
 35: 	WndClass.style = CS_HREDRAW | CS_VREDRAW;	//윈도우 스타일 정의
 36: 	
 37: 	/*윈도우 클래스 등록*/
 38: 	RegisterClass(&WndClass);
 39: 
 40: 	/*메모리상에 윈도우 생성*/
 41: 	hWnd=CreateWindow(lpszClass, /*타이틀바문자열*/TEXT("Test"), /*윈도우스타일*/WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL,
 42: 		/*윈도창위치*/CW_USEDEFAULT, /*윈도창위치*/CW_USEDEFAULT, /*폭*/640, /*높이*/480, NULL, (HMENU)NULL, hInstance,NULL);
 43: 	//(윈도클래스이름,타이틀바에나타날문자열,윈도우스타일,CW사용하면 운영체제가 화면크기에 맞게 알아서 조절, ....)
 44: 	
 45: 	ShowWindow(hWnd, nCmdShow);	//CreateWindow함수가 리턴한 핸들을 이용하여 출력(윈도우를 화면에 표시)
 46: 
 47: 	/*사용자로부터의 메시지 처리(메시지 루프)*/
 48: 	while(GetMessage(&Message, NULL, 0, 0))	//메시지 큐에서 읽어옴
 49: 	{							//GetMessage가 WM_QUIT면 False리턴
 50: 		TranslateMessage(&Message);	//키보드 입력 처리
 51: 		DispatchMessage(&Message);	//큐에서 꺼낸 메시지를 WndProc함수의 iMessage로 전달
 52: 	}
 53: 
 54: 	return(int)Message.wParam;		//메시지 루프 종료후 이 프로그램을 실행시킨 OS로 리턴
 55: }
 56: 
 57: LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
 58: {
 59: 	switch(iMessage)
 60: 	{
 61: 		case WM_CREATE:
 62: 			hVfw = capCreateCaptureWindow(TEXT("CCC"),WS_CHILD|WS_VISIBLE,0,0,320,240,hWnd,0);	//창만들기
 63: 			capDriverConnect(hVfw,0);	//창을 장치와 연결
 64: 			capPreviewRate(hVfw,1);		//카메라보이는 속도
 65: 			capGetVideoFormat(hVfw,&BInfo,sizeof(BITMAPINFO));		//비디오형식 정보를 BITMAPINFO에 넣기
 66: 			BInfo.bmiHeader.biWidth = 320;
 67: 			BInfo.bmiHeader.biHeight = 240;
 68: 			capSetVideoFormat(hVfw,&BInfo,sizeof(BITMAPINFO));		
 69: 			capPreview(hVfw,TRUE);		//화면 띄우기 FALSE는 화면을 띄우지 않음
 70: 			return 0;
 71: 
 72: 		case WM_DESTROY:
 73: 			PostQuitMessage(0);
 74: 			return 0;
 75: 	}
 76: 	
 77: 	return(DefWindowProc(hWnd, iMessage, wParam, lParam));
 78: }

 

capCreateCaptureWindow 함수는 캡쳐 윈도우를 생성한다.

hVfw = capCreateCaptureWindow(TEXT("CCC"),

    WS_CHILD|WS_VISIBLE,0,0,320,240,hWnd,0);    //창만들기 

capDriverConnect 매크로는 캡쳐 드라이버에 캡처 윈도우를 연결한다.

capDriverConnect(hVfw,0);    //창을 장치와 연결 

capPreviewRate 매크로는 미리보기 모드에서 프레임 표시 속도를 설정한다.

capPreviewRate(hVfw,1);        //카메라보이는 속도, 1을 1000으로 바꾸면 아주 느려지는것 확인

capGetVideoFormat 매크로는 사용중인 비디오 포맷의 사본을 얻을수있다.

capGetVideoFormat(hVfw,&BInfo,sizeof(BITMAPINFO));        //비디오형식 정보를 BITMAPINFO에 넣기 

BInfo.bmiHeader.biWidth = 320;      //영상처리화면 폭 

BInfo.bmiHeader.biHeight = 240;     //영상처리화면 높이 

capSetVideoFormat 매크로는 캡처될 비디오 데이타의 포맷을 설정한다.

capSetVideoFormat(hVfw,&BInfo,sizeof(BITMAPINFO));        

capPreview 매크로 활성화 또는 미리보기 모드를 해제한다.

미리보기 모드에서 프레임 캡처 하드웨어에서 시스템 메모리로 전송하고 다음 GDI 함수를 사용하여 캡처 윈도우에 표시된다.

capPreview(hVfw,TRUE);        //화면 띄우기 FALSE는 화면을 띄우지 않음

 

꾸미기_1_00001