private void CameraClose() { try { if (!IsStop) { this.CameraGrabStop(); } if (MatroxCameraList != null) { foreach (var cam in MatroxCameraList) { //cam free MIL.MdigFree(cam.DigitizerID); try { //board free MIL.MsysFree(cam.SystemID); } catch { //보드에 연결된 카메라가 다 닫히지 않았다면 이리로 들어옴 } } MatroxCameraList.Clear(); //app free MIL.MappFree(_MilApplication); } } catch (Exception err) { MessageBox.Show(err.Message + "\n" + err.StackTrace); } }
private void CameraOpen() { try { //mil app open MIL.MappAlloc(MIL.M_NULL, MIL.M_DEFAULT, ref _MilApplication); //mil throw 관리 MIL.MappControl(_MilApplication, MIL.M_ERROR, MIL.M_THROW_EXCEPTION); //설치된 보드 드라이버 수 가져오기 var insSysCount = MIL.MappInquire(MIL.M_INSTALLED_SYSTEM_COUNT); for (int i = 0; i < insSysCount; i++) { MIL_ID tmpSystem = MIL.M_NULL; StringBuilder sb = new StringBuilder(); //보드 종류 문자열로 뽑아내기 MIL.MappInquire(_MilApplication, MIL.M_INSTALLED_SYSTEM_DESCRIPTOR + i, sb); var boardCount = 0; //같은 종류의 보드 몇 개까지 존재하는지 확인 while (sb.ToString() != "M_SYSTEM_HOST") { MIL_ID systemId = MIL.M_NULL; try { //보드 alloc MIL.MsysAlloc(sb.ToString(), boardCount, MIL.M_DEFAULT, ref systemId); } catch { //해당 보드는 메인보드에서 인식되지 않음 (없음) break; } //alloc된 보드 추가 var cam = new MatroxCamera(); //Digitizer 몇개 존재하는지 확인 var digCount = MIL.MsysInquire(systemId, MIL.M_DIGITIZER_NUM); //임의의 dcf file 추가 (원하는 dcf로 변경) var dcfPath = AppDomain.CurrentDomain.BaseDirectory + @"\camfile.dcf"; //보드에 연결된 카메라 수만큼 돎 for (int ii = 0; ii < digCount; ii++) { MIL_ID digitId = MIL.M_NULL; //digitizer alloc MIL.MdigAlloc(systemId, ii, dcfPath, MIL.M_DEFAULT, ref digitId); cam.SystemID = systemId; cam.DigitizerID = digitId; } MatroxCameraList.Add(cam); boardCount++; } } } catch (Exception err) { MessageBox.Show(err.Message + "\n" + err.StackTrace); } }