/// \~chinese IKapC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ \~english Return value of IKapC functions
ITKSTATUSres=ITKSTATUS_OK;
ItkCameracam;
/// \~chinese <20><><EFBFBD><EFBFBD>buffer<65><72><EFBFBD><EFBFBD> \~english Set count of buffers
cam.g_bufferCount=10;
/// \~chinese <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>֡<EFBFBD><D6A1> \~english Set count of frames wanted
cam.g_grabCount=ITKSTREAM_CONTINUOUS;
/// \~chinese <20><><EFBFBD><EFBFBD>g_SerialNumberΪNULL<4C><4C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ConfigureCamera<72><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>index<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \~english Set
/// g_SerialNumber to NULL, ConfigureCamera function will use index to open camera later
/// \~chinese <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> \~english Set filename of image to be saved
/// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸 \~english Open camera with 0 index and configure camera device
inttmpIndex=-1;
fprintf(stderr,"total device count: %d, the index of which you want to open is:",numDevices);
fflush(stderr);
intscanTmp=scanf_s("%u",&tmpIndex);
if(scanTmp!=1){
fprintf(stderr,"Invalid input. Expect an integer.\n");
ItkManTerminate();
pressEnterToExit();
exit(EXIT_FAILURE);
}
if(tmpIndex>=numDevices)
{
fprintf(stderr,"index: %d is more than %d.\n",tmpIndex,numDevices-1);
ItkManTerminate();
pressEnterToExit();
exit(EXIT_FAILURE);
}
{intgetCharTmp=getchar();}
ConfigureCamera(&cam,tmpIndex);
if(cam.g_hBoard!=INVALID_HANDLE_VALUE){
fprintf(stderr,"Please select camera without grabber.\n");
ItkManTerminate();
pressEnterToExit();
exit(EXIT_FAILURE);
}
/// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ \~english Configure trigger method of the camera
SetSoftTriggerWithoutGrabber(&cam);
/// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>chunkdata \~english Configure chunkdata of the camera
SetChunkData(&cam,cam.benableChunkData);
/// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD> \~english Create data stream and buffer
CreateStreamAndBuffer(&cam);
/// \~chinese <20><><EFBFBD><EFBFBD>waitOneFrameReady<64><79>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \~english Set grab strategy for waitOneFrameReady api
/// \~chinese <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD>ڻ<EFBFBD>ȡͼ<C8A1><CDBC> \~english Create a worker thread that is used to acquire the images
/// \~chinese <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD> \~english Free data stream and buffers
ItkDevFreeStream(cam.g_hStream);
/// \~chinese <20>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸 \~english Close camera device
res=ItkDevClose(cam.g_hCamera);
CHECK(res);
/// \~chinese <20>ͷ<EFBFBD><CDB7>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ڴ<EFBFBD> \~english Release the memory for storing the buffer data
if(cam.g_bufferData!=NULL)
free(cam.g_bufferData);
/// \~chinese <20>ͷ<EFBFBD><CDB7>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Buffer<65><72>ַ<EFBFBD><D6B7><EFBFBD>ڴ<EFBFBD> \~english Release the memory that the user requests for setting the Buffer address
printf("On end of stream of camera with serialNumber:%s. \n",cam->g_devInfo.SerialNumber);
}
unsignedint__stdcallWorkThread(void*pUser)
{
ITKSTATUSres=ITKSTATUS_OK;
ITKBUFFERhBuffer=NULL;
ITK_BUFFER_INFObufferInfo={0};
pItkCameracam=(pItkCamera)pUser;
if(NULL==cam)
{
return0;
}
do
{
/// \~chinese timeout_ms <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>֡<EFBFBD><D6A1><EFBFBD>ڣ<EFBFBD><DAA3>˴<EFBFBD><CBB4><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> \~english timeout_ms needs to be greater than the actual camera frame period, which needs to be modified according to the actual situation
printf("On end of frame of camera with serialNumber:%s. \n",
cam->g_devInfo.SerialNumber);
res=ItkBufferGetInfo(hBuffer,&bufferInfo);
CHECK(res);
/// \~chinese <20><>ͼ<EFBFBD><EFBFBD><F1BBBAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><F1BBBAB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DEB7>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡ͼ<D6A1><CDBC>ʱ \~english When buffer is full or buffer is not full but cannot grab a complete frame of image
/// \~chinese <20><>ȡchunk<6E><6B><EFBFBD>ݣ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ChunkModeActive<76>ѿ<EFBFBD><D1BF><EFBFBD><EFBFBD><EFBFBD>ChunkSelector<6F><72><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> \~english Get chunk data provided that ChunkModeActive is on and the following corresponding parameters in ChunkSelector are enabled
/// \~chinese ֻ<>в<EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD> \~english Only the color cameras have these parameters
/// \~chinese <20><><EFBFBD><EFBFBD>MultiExposureTimeCount<6E><74><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD><CBB6><EFBFBD><EFBFBD>ع<D8B9>ܣ<EFBFBD><DCA3>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪN<CEAA><4E><EFBFBD>ع<EFBFBD>ʱ<EFBFBD>䣬[0~1*Height/N-1]<5D>ж<EFBFBD>ӦExposureSelectΪ1ʱ<31><CAB1>ExposureTime<6D><65>[1*Height/N~2*Height/N-1]<5D>ж<EFBFBD>ӦExposureSelectΪ2ʱ<32><CAB1>ExposureTime<6D><65>...<2E><>[(N-1)*Height/N~Height-1]<5D>ж<EFBFBD>ӦExposureSelectΪNʱ<4E><CAB1>ExposureTime. \~english If the MultiExposureTimeCount feature value is greater than 1, the multiple exposure function is turned on, The collected images were all divided into N exposure times, line [0~1 * Height / N-1] corresponds to the ExposureTime at a ExposureSelect of 1, line [1 * Height / N~2 * Height / N-1] corresponds to ExposureTime at ExposureSelect 2,..., line [(N-1) * Height / N~Height-1] corresponds to ExposureTime at ExposureSelect N.
/// \~chinese <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ItkStreamClearBuffer<65><72>Buffer<65>ͷ<EFBFBD> \~english need to call ItkStreamClearBuffer to release buffer