안녕하세요~
오늘은 실제로 소스 상에서 할당과 해제를 어떻게 하는지 살펴 볼까요?
#include “mil.h”
void main(void)
{
MIL_ID MilApplication;
MIL_ID MilSystem;
MIL_ID MilDigitizer;
MIL_ID MilImage;
MIL_ID MilDisplay;
// Allocate
MappAlloc(M_DEFAULT, &MilApplication);
MsysAlloc(M_SYSTEM_SOLIOS, M_DEV0, M_DEFAULT, &MilSystem);
MdigAlloc(MilSystem, M_DEV0, “svs11002mucp.dcf”, M_DEFAULT, &MilDigitizer);
MbufAlloc2d(MilSystem, 4008, 2672, 8+M_UNSIGNED, M_IMAGE+M_GRAB+M_DISP, &MilImage);
MdispAlloc(MilSystem, M_DEFAULT, "M_DEFAULT", M_WINDOWED, &MilDisplay);
…
// Free
MdispFree(MilDisplay);
MbufFree(MilImage);
MdigFree(MilDigitizer);
MsysFree(MilSystem);
MappFree(MilApplication);
}
다섯 개의 모듈을 순차적으로 할당하고, 해제했어요.
간단하지요?
자~ 그럼 라인by라인으로 쪼개어 설명합니다~
#include “mil.h”
MIL의 헤더 파일을 포함시켜야지요? 이 헤더 파일은 C:\Program Files\Matrox Imaging\Mil\Include 경로에 있습니다.
void main(void)
{
MIL_ID MilApplication;
MIL_ID MilSystem;
MIL_ID MilDigitizer;
MIL_ID MilImage;
MIL_ID MilDisplay;
MIL_ID는 MIL에서 사용하는 변수 타입은 long형 포인터입니다. 필요한 모듈을 MIL_ID형으로 선언하세요.
// Allocate
MappAlloc(M_DEFAULT, &MilApplication);
최상위 모듈을 할당하세요
MsysAlloc(M_SYSTEM_SOLIOS, M_DEV0, M_DEFAULT, &MilSystem);
시스템은 프레임 그래버 보드라고 했죠.
Solios 보드를 시스템으로 할당하고,
보드가 여러 장인 경우 M_DEV0, M_DEV1, … M_DEVn 으로 합니다.
일반적으로 VGA 카드에서 가까운 보드가 M_DEV0가 됩니다.
그러나 산업용 컴퓨터의 경우는 좀 다를 수 있으니 확인하세요.
MdigAlloc(MilSystem, M_DEV0, “Clcamera.dcf”, M_DEFAULT, &MilDigitizer);
카메라에 대한 할당입니다.
보세요~ 첫 번째 인자로 MilSystem이 되어 있지요?
이 MilSystem은 Solios 보드를 할당한 것입니다.
따라서 MilDigitiezr는 Solios 보드에 연결된 카메라이다 라는 것을 알 수 있습니다.
첫 강좌에서 말한 것과 같이 digitizer는 system에 종속되어 있습니다.
M_DEV0는 위와 마찬가지로 첫 번째 카메라라는 의미입니다.
따옴표 안에 들어간 Clcamera….dcf는 무엇일까요?
Dcf는 digitizer configuration file의 약자입니다.
카메라에 대한 정보를 dcf 파일에 담고 있습니다.
frame grabber는 사용자가 어떤 카메라를 쓰는지 알 수 없기 때문에 카메라에 대한 정보를 알려주어야 합니다.
따라서 Intellicam이라는 Tool을 통해 영상을 확인한 후, 그 dcf 파일을 소스상에서 사용하면 됩니다.
dcf 파일은 고민할 필요 없이 앤아이피에 문의하면 되요~
MbufAlloc2d(MilSystem, 4008, 2672, 8+M_UNSIGNED, M_IMAGE+M_GRAB+M_DISP, &MilImage);
버퍼의 할당입니다.
역시 system에 종속되어 있지요?
4008, 2672는 카메라의 해상도를 말합니다.
직접 지정하기도 하고, MdigInquire( )를 이용하여 digitizer의 sizeX, sizeY를 얻어올 수 있습니다.
8+M_UNSIGNED에서 8은 카메라의 data depth(8-bit)이며, unsigned 형으로 할당한다는 의미 입니다.
다음은 아주 중요한 속성이죠.
사용자가 이 버퍼를 어떠한 용도로 사용하겠느냐는 것입니다.
M_IMAGE+M_GRAB+M_DISP는 ‘이미지용+영상획득용+영상출력용’ 으로 사용하겠다는 의미입니다.
원하는 속성을 플러스 기호(+)로 연결하면 됩니다.
MdispAlloc(MilSystem, M_DEFAULT, "M_DEFAULT", M_WINDOWED, &MilDisplay);
디스플레이에 대한 할당입니다.
여러 개의 화면에 출력하는 경우, disp 모듈을 여러 개 할당하면 됩니다.
컴퓨터에 연결된 모니터 상에 출력하는 경우, 위와 같이 할당하면 됩니다.
…
// Free
MdispFree(MilDisplay);
MbufFree(MilImage);
MdigFree(MilDigitizer);
MsysFree(MilSystem);
MappFree(MilApplication);
할당한 모듈 순서의 반대로 각 모듈별 Free() 함수를 이용하여 해제하면 됩니다.
}
각 함수의 파라미터는 MILHelp를 참고하세요.
대부분의 위에서 설명한 내용에서 크게 벗어나지 않습니다.