#include "Header_Files/irisximeaimager.h" using namespace Iris; void Iris::IrisXimeaImager::setGainOffset(float gain, float offset) { m_fGain = gain; m_fOffset = offset; } bool Iris::IrisXimeaImager::setSpectralBin(int spectralBin) { CE(xiSetParamInt(m_xiH, XI_PRM_BINNING_SELECTOR, XI_BIN_SELECT_HOST_CPU));//用:XI_BIN_SELECT_HOST_CPU;默认为XI_BIN_SELECT_SENSOR(会报错),不可用:XI_BIN_SELECT_DEVICE_FPGA CE(xiSetParamInt(m_xiH, XI_PRM_BINNING_VERTICAL_MODE, XI_BIN_MODE_AVERAGE)); CE(xiSetParamInt(m_xiH, XI_PRM_BINNING_VERTICAL, spectralBin)); printf("Iris::IrisXimeaImager::setSpectralBin----2 设置bin模式为XI_PRM_BINNING_SELECTOR XI_BIN_MODE_AVERAGE !\n"); // CE(xiSetParamInt(m_xiH, XI_PRM_DECIMATION_SELECTOR, XI_DEC_SELECT_SENSOR)); // CE(xiSetParamInt(m_xiH, XI_PRM_DECIMATION_VERTICAL, spectralBin)); m_iSpectralBin = spectralBin; return true; } bool Iris::IrisXimeaImager::setSpatialBin(int spatialBin) { CE(xiSetParamInt(m_xiH, XI_PRM_BINNING_SELECTOR, XI_BIN_SELECT_HOST_CPU));//用:XI_BIN_SELECT_HOST_CPU;默认为XI_BIN_SELECT_SENSOR(会报错),不可用:XI_BIN_SELECT_DEVICE_FPGA CE(xiSetParamInt(m_xiH, XI_PRM_BINNING_HORIZONTAL_MODE, XI_BIN_MODE_AVERAGE)); CE(xiSetParamInt(m_xiH, XI_PRM_BINNING_HORIZONTAL, spatialBin)); printf("Iris::IrisXimeaImager::setSpatialBin----2 设置bin模式为XI_PRM_BINNING_SELECTOR XI_BIN_MODE_AVERAGE !\n"); // CE(xiSetParamInt(m_xiH, XI_PRM_DECIMATION_SELECTOR, XI_DEC_SELECT_SENSOR)); // CE(xiSetParamInt(m_xiH, XI_PRM_DECIMATION_HORIZONTAL, spatialBin)); m_iSpatialBin = spatialBin; return true; } int Iris::IrisXimeaImager::getSpectralBin() { int spectralBin = 0; CE(xiGetParamInt(m_xiH, XI_PRM_BINNING_VERTICAL, &spectralBin)); // CE(xiGetParamInt(m_xiH, XI_PRM_DECIMATION_VERTICAL, &spectralBin)); return spectralBin; } int Iris::IrisXimeaImager::getSpatialBin() { int spatialBin = 0; CE(xiGetParamInt(m_xiH, XI_PRM_BINNING_HORIZONTAL, &spatialBin)); // CE(xiGetParamInt(m_xiH, XI_PRM_DECIMATION_HORIZONTAL, &spatialBin)); return spatialBin; } void Iris::IrisXimeaImager::setEffectiveWindow(int OffsetX, int width, int OffsetY, int height) { CE(xiSetParamInt(m_xiH, XI_PRM_WIDTH, width)); CE(xiSetParamInt(m_xiH, XI_PRM_OFFSET_X, OffsetX)); CE(xiSetParamInt(m_xiH, XI_PRM_HEIGHT, height)); CE(xiSetParamInt(m_xiH, XI_PRM_OFFSET_Y, OffsetY)); m_iEffectiveWindow_OffsetX = OffsetX; m_iEffectiveWindow_width = width; m_iEffectiveWindow_OffsetY = OffsetY; m_iEffectiveWindow_height = height; } void Iris::IrisXimeaImager::setEffectiveWindowRoi(int OffsetX, int width) { m_iEffectiveWindowRoi_OffsetX = OffsetX; m_iEffectiveWindowRoi_width = width; } int Iris::IrisXimeaImager::getBufferSizeOfOneFrame() { // if(m_xiH==NULL) // return 0; // // start(); // // //清空image缓存 // memset(&m_image, 0, sizeof(m_image)); // m_image.size = sizeof(XI_IMG); // // CE(xiGetImage(m_xiH, 5000, &m_image)); // getting next image from the camera opened // // stop(); // // return static_cast(m_image.bp_size); // //比实际大小(m_iEffectiveWindow_height * m_iEffectiveWindow_width * 2)大,why? // int value = 0; // xiGetParamInt(m_xiH, XI_PRM_IMAGE_PAYLOAD_SIZE, &value); return m_iEffectiveWindow_height * m_iEffectiveWindow_width * 2; } float Iris::IrisXimeaImager::getTemperature() { float temperature = 0.0; CE(xiGetParamFloat(m_xiH, XI_PRM_TEMP, &temperature)); return temperature; } void Iris::IrisXimeaImager::setBufferPolicy(int bufferPolicy) { if (bufferPolicy==0) { xiSetParamInt(m_xiH, XI_PRM_BUFFER_POLICY, XI_BP_UNSAFE); printf("Iris::IrisXimeaImager::connect---- XI_PRM_BUFFER_POLICY: XI_BP_UNSAFE\n"); } else if (bufferPolicy==1) { xiSetParamInt(m_xiH, XI_PRM_BUFFER_POLICY, XI_BP_SAFE); printf("Iris::IrisXimeaImager::connect---- XI_PRM_BUFFER_POLICY: XI_BP_SAFE\n"); } } void Iris::IrisXimeaImager::setAcqBufferSize(int acqBufferSize) { XI_RETURN stat = XI_OK; // set unit to 1 MiB xiSetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE_UNIT, 1024*1024); int value = 0; xiGetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, &value); printf("Iris::IrisXimeaImager::connect---- XI_PRM_ACQ_BUFFER_SIZE: %d MiB.\n", value); xiSetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, acqBufferSize); xiGetParamInt(m_xiH, XI_PRM_ACQ_BUFFER_SIZE, &value); printf("Iris::IrisXimeaImager::connect---- XI_PRM_ACQ_BUFFER_SIZE: %d MiB.\n", value); // set maximum number of queue int number_of_field_buffers = 0; xiGetParamInt(m_xiH, XI_PRM_BUFFERS_QUEUE_SIZE XI_PRM_INFO_MAX, &number_of_field_buffers); printf("Iris::IrisXimeaImager::connect---- XI_PRM_BUFFERS_QUEUE_SIZE XI_PRM_INFO_MAX: %d.\n", number_of_field_buffers); HandleResult(stat,"xiGetParam (number_of_field_buffers maximum)"); xiSetParamInt(m_xiH, XI_PRM_BUFFERS_QUEUE_SIZE, number_of_field_buffers); HandleResult(stat,"xiSetParam (number_of_field_buffers)"); } Iris::IrisXimeaImager::IrisXimeaImager() { m_xiH=NULL; std::cout<<"ximeaControlDll 版本:"<< "21." <