2011년11월16일_VFW_Video for Windows라이브러리를 이용한 CAM(DC-300)영상 캡쳐
● VS6.0 링크옵션에서 VFW 라이브러리 추가하는 법
프로젝트를 생성한 후 메뉴Project – Settings..을 선택하여 프로젝트 설정을 바꾼다.
빨간 사격형의 Win32 Debug는 개발단계에서 디버그를 위한 것이고,
Release는 제품을 판매할 때 불필요한 디버그정보를 제거하게 최적화한다는 것이다.
링크탭을 클릭한 후 Object/library modules에, lib파일(라이브러리)들을 추가한 곳에 vfw32.lib를 추가하자.
그럼 아래의 Project Options도 내용이 추가된다.
Project Options는 컴파일러와 링커를 구동할 때 들어가는 실제 옵션으로 상단의 체크박스와 에디트의 내용이 조합된 결과다.
세세한 설정을 할 때 여기를 수정하면 되나 복잡하니 모르면 건들지 말자!!
이렇게 설정을 한 후 소스코드에, #include <vfw.h>을 추가해 라이브러리 함수를 사용할 수 있게 하자.
이 방식의 장점은 쉽게 옵션을 추가하고 컴파일할 수 있다는 것이다.
● 소스코드에서 VFW라이브러리를 추가하는 법
전처리문인 #pragma 다음에 오는 directive name에 comment를 사용해 출력되어지는 파일에 주석을 기록할 것을 지시하고,
comment type에 lib를 사용해 기록목표는 .OBJ(오브젝트)파일로 한다. “ “ 큰 따옴표 안에 들어가는 문자열이 라이브러리명이고,
2행은 vfw32.lib파일을 링크하라는 뜻이다.
이 방식의 장점은 소스코드에 컴파일 옵션이 포함된 격이므로 컴파일시 VS6.0 워크스페이스파일들을 필요로 하지 않는다.
(컴파일옵션을 고친 후 소스코드만 공개하면 어떻게 컴파일해야 하는지 모르므로 문제가 될 수 있다.)
● 전체소스코드...VFW라이브러리를 사용한 CAM영상 캡쳐 (수동식 라이브러리 추가)
▶ 소스코드설명
capCreateCaptureWindow( )는 캡쳐 윈도우를 생성하는 함수로,
CreateWindow( )와 비슷하게 첫 번째 인자로 클래스명을 적어준다. 타이틀바는 필요없으니 생략하고,
두 번째 인자로 윈도우의 스타일을 지정한다. 이어 (x, y)좌표와 윈도우의 크기, 부모윈도우 핸들과 ID를 넣으면 캡쳐 윈도우가 생성된다.
그 생성된 윈도우의 핸들을 반환한다.
아래의 링크를 클릭하면 man page비슷한 MSDN에서 해당함수에 대한 설명을 볼 수 있다.
참조URL: http://msdn.microsoft.com/en-us/library/windows/desktop/dd756879(v=vs.85).aspx
capDriverConnect( )는 USB CAM 드라이버와 응용프로그램내의 0번 ID와 hVfw핸들을 가진 윈도우를 연결하는 매크로이다.
이 매크로를 사용하거나 WM_CAP_DRIVER_CONNECT 메시지를 보내면 된다고 나와있고,
반환형은 BOOL로 성공하면 TRUE를 반환하고 실패시 FALSE의 값을 반환한다. (BOOL은 int형이다. C++이 아니라 bool이 없다.)
참조URL: http://msdn.microsoft.com/en-us/library/windows/desktop/dd756885(v=vs.85).aspx
capPreviewRate( )는 CAM에서 보내오는 영상의 갱신속도를 지정하는 매크로이다.
이 매크로를 사용하거나 명시적으로 WM_CAP_SET_PREVIEWRATE 메시지를 호출하면 된다고 나와있고,
반환형은 BOOL로 성공하면 TRUE를 반환하고 실패시 FALSE의 값을 반환한다.
1ms는 1/1000초로 카메라에서는 굉장히 빠른 캡쳐 속도이다.
저질 웹캠이 보통 30프레임정도 찍고, 인간의 눈도 30프레임이상은 구분할 수 없으니 33ms와 1ms는 차이가 없다고 할 수 있다.
1000을 넣으면 1초로 매우 느리게 화면이 갱신되는 것을 확인할 수 있다.
참조URL: http://msdn.microsoft.com/en-us/library/windows/desktop/dd756925(v=vs.85).aspx
capGetVideoFormat( )는 해당 캡쳐 윈도우(hVfw)에서 비디오 형식을 얻어와 BITMAPINFO구조체에 저장하는 매크로다.
이 매크로를 사용하거나 명시적으로 WM_CAP_GET_VIDEOFORMAT 메시지를 호출할 수 있다.
반환형은 BOOL로 성공하면 TRUE를 반환하고 실패시 FALSE의 값을 반환한다.
참조URL: http://msdn.microsoft.com/en-us/library/windows/desktop/dd756913(v=vs.85).aspx
BInfo구조체에 비디오형식에 대한 정보가 저장되어 있고, 그 중에서 가로와 세로폭만 수정한다.
(시리얼포트설정과 비슷하게 설정을 Get하고 수정한 뒤 설정을 Set한다. )
78행에 사용한 capGetVideoFormat( )와 쌍을 이루는 capSetVideoFormat( )로 비디오형식에 대한 정보를 바꾼다.
capGetVideoFormat( )과 사용법이 동일하므로 설명은 생략~
참조URL: http://msdn.microsoft.com/en-us/library/windows/desktop/dd756938(v=vs.85).aspx
capPreview( ) 매크로의 두 번째 인자를 TRUE로 하여 사용하지 않으면 캡쳐윈도우는 동작을 하지 않는다. 디폴트가 FALSE인듯..
아래의 설명은 MSDN에서 퍼옴~
The capPreview macro enables or disables preview mode. In preview mode, frames are transferred from the capture hardware to system memory and then displayed in the capture window using GDI functions. You can use this macro or explicitly call the WM_CAP_SET_PREVIEW message. capPreview 매크로 활성화 또는 미리보기 모드를 해제합니다. 미리보기 모드에서 프레임 캡처 하드웨어에서 시스템 메모리로 전송하고 다음 GDI 함수를 사용하여 캡처 윈도우에 표시됩니다. 이 매크로를 사용하거나 명시적으로 WM_CAP_SET_PREVIEW 메시지를 호출할 수 있습니다. |
GDI함수를 사용하여 캡처 윈도우에 표시하는 기능을 하고,
캡처 속도는 상기의 capPreviewRate( ) 매크로로 조절한다. 실행 중에 조절할 수 있나?
수업시간에 배운 함수와 매크로외에도 많이 있다. (함수리스트는 찾아보겠음)
참조URL: http://msdn.microsoft.com/en-us/library/windows/desktop/dd743598(v=vs.85).aspx
● 실행결과
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년12월12일_JAVA_인스턴스메소드와 정적메소드, 메소드 오버로딩, 객체의 복사, 패키지 (0) | 2011.12.12 |
---|---|
2011년11월29일_BrickOS mm.c의 MM_BLOCK_FREE 매크로함수 분석 (0) | 2011.11.30 |
2011년10월31일_버블/선택/삽입 정렬의 시간을 측정해보자. 삽입정렬 개선 (0) | 2011.11.01 |
2011년10월28일_버블/선택/삽입 정렬의 시간을 측정해 보자. (0) | 2011.10.28 |
2011년10월26일_ARM_서보모터AX-12+ 받음 (0) | 2011.10.27 |