#include "Header_Files/ximeaimager.h" XimeaImager::XimeaImager() { m_buffer=nullptr; m_bRecordControl=false; m_iFrameCounter=0; m_iImagerState=100; //connect(this, SIGNAL(recordFinished()),this, SLOT()); m_configfile.setConfigfilePath("ximea.cfg"); if(!m_configfile.isConfigfileExist()) m_configfile.createConfigFile(); m_configfile.parseConfigfile(); m_recordTempThread=new QThread(); m_ximeaTemperature = new RecordXimeaTemperature(&m_imager); m_ximeaTemperature->moveToThread(m_recordTempThread); m_recordTempThread->start(); connect(this, SIGNAL(recordXimeaTemperatureSignal(QString)),m_ximeaTemperature, SLOT(recordTemperature(QString))); } void XimeaImager::openImger() { if(m_iImagerState != 100)//如果相机已经打开或者已经出错,就直接返回 { emit ximeaImageStatus(m_iImagerState); return; } try { //std::cout<<"XimeaImager::openImger111111111111111111111:正在打开相机!"<stopRecordTemperature(); if(m_iImagerState==100) { emit ximeaImageStatus(m_iImagerState); return; } try { m_imager.disconnect(); m_iImagerState=100; emit ximeaImageStatus(m_iImagerState); } catch(int xiApiErrorCodes) { std::cout<<"XimeaImager::closeImger-------------------!"<maxValue) { //std::cout<<"像素值为:"<< *(data + i) <stopRecordTemperature();//开始采集影像前,停止获取相机的温度,以免降低帧率; try { if(m_iImagerState <= 99 || m_iImagerState==100 || m_iImagerState==104) { emit ximeaImageStatus(m_iImagerState); return; } m_iImagerStateTemp=m_iImagerState; m_iImagerState=104; emit ximeaImageStatus(m_iImagerState); printf("开始采集!\n"); m_iFrameCounter=0; m_bRecordControl=true; m_imager.start(); m_baseFileName=baseFileName; QString imageFileName=m_baseFileName+".bil"; QString timesFileName=m_baseFileName+".times"; // FILE *hFile=fopen(imageFileName.toStdString().c_str(),"w+b"); FILE *hHimesFile=fopen(timesFileName.toStdString().c_str(),"w+"); using namespace std; ofstream timesFileHandle(timesFileName.toStdString()+"_ofstream"); struct timeval timeStart, timeEnd; double runTime=0; gettimeofday(&timeStart, NULL); while (m_bRecordControl) { unsigned short *x=m_imager.get_frame(m_buffer); //fwrite(m_buffer,2,getBandCount()*getSampleCount(),hFile); fwrite(m_buffer,1,m_iFrameSizeInByte,hFile);//********************************* //fflush(hFile);//只保证了将IO缓冲写入系统缓冲中,使IO读操作能成功,但系统什么时候写入磁盘,由系统决定,一般是达到一定量时系统他就写入磁盘。 //sync();//强制系统将系统文件缓冲的内容写入磁盘 m_iFrameCounter+=1; // if(m_iFrameCounter==100) // break; double sbgTime=getSbgTime(TimeDifferenceBetweensOSAndSbg); fprintf(hHimesFile,"%f\n",sbgTime); //fwrite(&sbgTime,sizeof(double),1,hHimesFile); timesFileHandle << sbgTime << "\n"; // std::cout<<"XimeaImager::startRecord---std::cout: "<getTemperature(); QDateTime curDateTime = QDateTime::currentDateTime(); QString currentTime = curDateTime.toString("yyyy/MM/dd hh:mm:ss"); ximeaTemperatureFile << currentTime.toStdString() << "," << temp << "\n"; // std::cout<<"RecordXimeaTemperature::recordTemperature----------------:ximea Temperature is "<< temp <