116 lines
3.0 KiB
C++
116 lines
3.0 KiB
C++
#ifndef XIMEAIMAGER_H
|
|
#define XIMEAIMAGER_H
|
|
|
|
/*
|
|
This is the reference example application code for XIMEA cameras.
|
|
You can use it to simplify development of your camera application.
|
|
|
|
Sample name:
|
|
xiAPI / Capture-10-images
|
|
|
|
Description:
|
|
Open camera, capture 10 images while printing first pixel from each image.
|
|
|
|
Workflow:
|
|
1: Open camera
|
|
2: Set parameters
|
|
3: Start acquisition
|
|
4: Each image captured - print dimensions and value of the first pixel
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <iostream>
|
|
#include <sys/time.h>
|
|
#include <memory.h>
|
|
#include <fstream>
|
|
#include <unistd.h>
|
|
#include <exception>
|
|
|
|
#include <QObject>
|
|
#include <qthread.h>
|
|
|
|
#include "irisximeaimager.h"
|
|
#include "math.h"
|
|
#include "utility_tc.h"
|
|
|
|
|
|
//#ifdef WIN32
|
|
//#include <xiApi.h> // Windows
|
|
//#else
|
|
//#include <m3api/xiApi.h> // Linux, OSX
|
|
//#endif
|
|
|
|
class XimeaImager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
XimeaImager();
|
|
|
|
void setFramerate(double framerate);
|
|
double getFramerate();
|
|
double setExposureTime(float exposureTime);
|
|
double getExposureTime();
|
|
double autoExposure();
|
|
void setGain(double gain);
|
|
double getGain();
|
|
int getSampleCount();
|
|
int getBandCount();
|
|
|
|
int getWindowStartBand();
|
|
int getWindowEndBand();
|
|
double geWavelengthAtBand(int x);
|
|
|
|
void stopRecord();
|
|
int getFrameCounter();
|
|
|
|
int getMaxValueOfOneFrame(unsigned short * data, int numberOfPixel);
|
|
|
|
int getImagerState() const;
|
|
private:
|
|
//0:未打开;1:打开;2:设置帧率;3:自动曝光;4:正在采集; 21,未处理错误;22:RESOURCE_OR_FUNCTION_LOCKED;23,;
|
|
int m_iImagerState;
|
|
int m_iImagerStateTemp;
|
|
|
|
QString m_baseFileName;
|
|
|
|
Iris::IrisXimeaImager m_imager;
|
|
unsigned short * m_buffer;
|
|
bool m_bRecordControl;
|
|
int m_iFrameCounter;
|
|
int m_iFrameSizeInByte;
|
|
void writeHdr();
|
|
|
|
void processXiApiErrorCodes(int xiApiErrorCodes);
|
|
|
|
inline double getSbgTime(double TimeDifferenceBetweensOSAndSbg)
|
|
{
|
|
struct timespec systemTime;
|
|
clock_gettime(CLOCK_REALTIME,&systemTime);
|
|
tm systemTime_rili;
|
|
localtime_r(&systemTime.tv_sec, &systemTime_rili);
|
|
|
|
double secondSystem=(systemTime_rili.tm_mday-1)*24*60*60+systemTime_rili.tm_hour*60*60+systemTime_rili.tm_min*60+systemTime_rili.tm_sec;
|
|
double nanosecondSystem=secondSystem+static_cast<double>(systemTime.tv_nsec)/1000000000;
|
|
|
|
|
|
// printf("\n");
|
|
// printf("XimeaImager::getSbgTime------系统时间纳秒%d\n", systemTime.tv_nsec);
|
|
// printf("XimeaImager::getSbgTime------系统时间(未偏移)%f\n", nanosecondSystem);
|
|
// printf("XimeaImager::getSbgTime------系统时间(偏移)%f\n", nanosecondSystem-TimeDifferenceBetweensOSAndSbg);
|
|
|
|
return nanosecondSystem-TimeDifferenceBetweensOSAndSbg;
|
|
}
|
|
|
|
public slots:
|
|
void openImger();
|
|
void closeImger();
|
|
|
|
void startRecord(double TimeDifferenceBetweensOSAndSbg,QString baseFileName);
|
|
|
|
signals:
|
|
void recordFinished();
|
|
void ximeaImageStatus(int);
|
|
};
|
|
#endif // XIMEAIMAGER_H
|