private void InitAcqFifo()
{
CogFrameGrabbers FrameGrabber = new CogFrameGrabbers();//識別已安裝的幀抓取器的類//幀抓取器:相機
if (FrameGrabber.Count > 0)//如果相機個數大於1
{
for (int i = 0; i < FrameGrabber.Count; i++)
{
//在此幀抓取器上創建新的採集fifo。AutoPrepare的值將用作autopreparenabled屬性的初始設置。如果該值爲真,則在創建fifo後將準備fifo。
FIFO[i] = FrameGrabber[i].CreateAcqFifo(FrameGrabber[i].AvailableVideoFormats[1], CogAcqFifoPixelFormatConstants.Format8Grey, 0, true);
if (FIFO == null)
{
throw new CogAcqCannotCreateFifoException("無法創建採集FIFO.");
}
CameraName = FIFO[i].FrameGrabber.Name;
Trigger[i] = FIFO[i].OwnedTriggerParams;
Trigger[i].TriggerModel = CogAcqTriggerModelConstants.Auto;//獲取由外部觸發器啓動。調用startackire是個錯誤
Trigger[i].TriggerEnabled = true;
if (Trigger == null)
{
throw new CogAcqNoFrameGrabberException("這種板型 " + FIFO[i].FrameGrabber.Name + "不支持觸發模式.");
}
//FIFO[i].StartAcquire();
AcqExposure = FIFO[i].OwnedExposureParams;
AcqExposure.Exposure = 0.45;
//AcqBrightness = FIFO[i].OwnedBrightnessParams;
//AcqBrightness.Brightness = 0.9;
//FIFO[i].Complete += new CogCompleteEventHandler(FIFO0_Complete);
switch (i)
{
case 0: FIFO[0].Complete += new CogCompleteEventHandler(FIFO0_Complete); break;
case 1: FIFO[1].Complete += new CogCompleteEventHandler(FIFO1_Complete); break;
case 2: FIFO[2].Complete += new CogCompleteEventHandler(FIFO2_Complete); break;
}
}
}
else
{
throw new CogAcqNoFrameGrabberException("電路板可能丟失或工作不正常.");
}
}
public int numReadyVal0, numPendingVal0, myTicket0, currentTrigNum0;
public int numReadyVal1, numPendingVal1, myTicket1, currentTrigNum1;
public int numReadyVal2, numPendingVal2, myTicket2, currentTrigNum2;
public bool busyVal0 = false;
public bool busyVal1 = false;
public bool busyVal2 = false;
int TriggerCount0 = 0;
int TriggerCount1 = 0;
int TriggerCount2 = 0;
ICogImage[] Image = new ICogImage[5];/////
bool CamFlag1 = false, CamFlag2 = false, CamFlag3 = false;
void FIFO0_Complete(object sender, CogCompleteEventArgs e)
{
try
{
FIFO[0].GetFifoState(out numPendingVal0, out numReadyVal0, out busyVal0);
if (numReadyVal0 > 0)
{
TriggerCount0++;
numReadyVal0 = 0;
Image[0] = FIFO[0].CompleteAcquire(-1, out myTicket0, out currentTrigNum0);
//cogRecordDisplay1.Image = FIFO[0].CompleteAcquire(-1, out myTicket0, out currentTrigNum0);
CamFlag1 = true;
if (TriggerCount0 == 4)
{
TriggerCount0 = 0;
GC.Collect();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void FIFO1_Complete(object sender, CogCompleteEventArgs e)
{
try
{
FIFO[1].GetFifoState(out numPendingVal1, out numReadyVal1, out busyVal1);
if (numReadyVal1 > 0)
{
TriggerCount1++;
numReadyVal1 = 0;
Image[1] = FIFO[1].CompleteAcquire(-1, out myTicket1, out currentTrigNum1);
//cogRecordDisplay2.Image = FIFO[1].CompleteAcquire(-1, out myTicket1, out currentTrigNum1);
CamFlag2 = true;
if (TriggerCount1 == 4)
{
TriggerCount1 = 0;
GC.Collect();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
void FIFO2_Complete(object sender, CogCompleteEventArgs e)
{
try
{
FIFO[2].GetFifoState(out numPendingVal2, out numReadyVal2, out busyVal2);
if (numReadyVal2 > 0)
{
TriggerCount2++;
numReadyVal2 = 0;
Image[2] = FIFO[2].CompleteAcquire(-1, out myTicket2, out currentTrigNum2) ;
//cogRecordDisplay3.Image = FIFO[2].CompleteAcquire(-1, out myTicket2, out currentTrigNum2);
CamFlag3 = true;
if (TriggerCount2 == 4)
{
TriggerCount2 = 0;
GC.Collect();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
感覺我這備註寫的挺多的,應該好理解吧