diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 2190cf0..99dc4e7 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -1662,6 +1662,10 @@ void HPPA::onconnect() connect(this->ui.action_start_recording, SIGNAL(triggered()), this, SLOT(onStartRecordStep1())); connect(this, SIGNAL(StartLoopSignal()), m_ForLoopControl, SLOT(startLoop())); connect(this, SIGNAL(StartRecordSignal()), m_Imager, SLOT(start_record())); + connect(this, SIGNAL(RecordWhiteSignal()), m_Imager, SLOT(record_white())); + connect(this, SIGNAL(RecordDarlSignal()), m_Imager, SLOT(record_dark())); + connect(m_Imager, SIGNAL(RecordWhiteFinishSignal()), this, SLOT(recordWhiteFinish())); + connect(m_Imager, SIGNAL(RecordDarlFinishSignal()), this, SLOT(recordDarkFinish())); connect(this->ui.actionOpenDirectory, SIGNAL(triggered()), this, SLOT(onActionOpenDirectory())); @@ -1789,8 +1793,12 @@ void HPPA::onDark() QMessageBox msgBox; msgBox.setText(QString::fromLocal8Bit("ÇëÈ·±£¾µÍ·¸Ç¸ÇÉÏ£¡")); msgBox.exec(); - m_Imager->record_dark(); + emit RecordDarlSignal(); +} + +void HPPA::recordDarkFinish() +{ ui.mainToolBar->widgetForAction(ui.action_dark)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); } @@ -1799,9 +1807,32 @@ void HPPA::onReference() QMessageBox msgBox; msgBox.setText(QString::fromLocal8Bit("ÇëÈ·±£°×°å·ÅÖÃÕýÈ·£¡")); msgBox.exec(); - m_Imager->record_white(); + //ÒÆ¶¯xÂí´ï + if (!isMotorConnected(m_xMotor)) + { + m_xMotor->EnableMotro(); + m_lXmotorLocationOfStartRecord = m_xMotor->GetLocationNow(); + m_xMotor->SettingSpeed(ui.xmotor_speed_slider->OriginalValue()); + //m_xMotor->SettingSpeed(m_lManualSpeedOfXMotor); + + m_xMotor->MoveMotar(true); + } + + emit RecordWhiteSignal(); +} + +void HPPA::recordWhiteFinish() +{ ui.mainToolBar->widgetForAction(ui.action_reference)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + + //ÒÆ¶¯xÂí´ï + if (!isMotorConnected(m_xMotor)) + { + //xÂí´ï·µ»Ø²É¼¯Ç°µÄλÖà + m_xMotor->SettingSpeed(m_lManualSpeedOfXMotor); + m_xMotor->MoveToLocation(m_lXmotorLocationOfStartRecord); + } } void HPPA::onPlotHyperspectralImageRgbImage() diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index de50f74..04e0dcd 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -256,7 +256,9 @@ public Q_SLOTS: void onFocus2(int command); void onAbout(); void onDark(); + void recordDarkFinish(); void onReference(); + void recordWhiteFinish(); void onStartRecordStep1(); void onStartRecordStep2(int lineNumber); void onCreateTab(int trackNumber); @@ -336,5 +338,7 @@ signals: void StartRecordSignal(); void CopyFileThreadSignal(QString, QString); + void RecordWhiteSignal(); + void RecordDarlSignal(); }; diff --git a/HPPA/ImagerOperationBase.cpp b/HPPA/ImagerOperationBase.cpp index 23c02ac..a03121f 100644 --- a/HPPA/ImagerOperationBase.cpp +++ b/HPPA/ImagerOperationBase.cpp @@ -111,17 +111,59 @@ void ImagerOperationBase::record_dark() { std::cout << "²É¼¯°µµçÁ÷£¡£¡£¡£¡£¡£¡£¡£¡£¡" << std::endl; imagerStartCollect(); - getFrame(dark); + + unsigned int* dark_tmp = new unsigned int[m_FrameSize]; + std::fill(dark_tmp, dark_tmp + m_FrameSize, 0); + + int counter = 50; + for (size_t i = 0; i < counter; i++) + { + getFrame(dark); + + for (size_t j = 0; j < m_FrameSize; j++) + { + dark_tmp[j] = dark[j] + dark_tmp[j]; + } + } + + for (size_t j = 0; j < m_FrameSize; j++) + { + dark[j] = (unsigned short)(dark_tmp[j] / counter); + } + delete[] dark_tmp; + imagerStopCollect(); m_HasDark = true; + + emit RecordDarlFinishSignal(); } void ImagerOperationBase::record_white() { - std::cout << "²É¼¯°µ°×°å£¡£¡£¡£¡£¡£¡£¡£¡£¡" << std::endl; + std::cout << "²É¼¯°×°å£¡£¡£¡£¡£¡£¡£¡£¡£¡" << std::endl; imagerStartCollect(); - getFrame(white); + + unsigned int* white_tmp = new unsigned int[m_FrameSize]; + std::fill(white_tmp, white_tmp + m_FrameSize, 0); + + int counter = 50; + for (size_t i = 0; i < counter; i++) + { + getFrame(white); + + for (size_t j = 0; j < m_FrameSize; j++) + { + white_tmp[j] = white[j] + white_tmp[j]; + } + } + + for (size_t j = 0; j < m_FrameSize; j++) + { + white[j] = (unsigned short)(white_tmp[j] / counter); + } + delete[] white_tmp; + imagerStopCollect(); //°×°å¿Û°µµçÁ÷ @@ -141,6 +183,8 @@ void ImagerOperationBase::record_white() } m_HasWhite = true; + + emit RecordWhiteFinishSignal(); } void ImagerOperationBase::start_record() diff --git a/HPPA/ImagerOperationBase.h b/HPPA/ImagerOperationBase.h index 1674099..4aaecc4 100644 --- a/HPPA/ImagerOperationBase.h +++ b/HPPA/ImagerOperationBase.h @@ -97,6 +97,9 @@ signals: void RecordFinishedSignal_WhenFrameNumberNotMeet();//²É¼¯Íê³ÉÐźţºÐèÒª²É¼¯µÄ×ÜÖ¡Êý£¨m_iFrameNumber£©Ã»Óвɼ¯Íê³É£¬ÖÐ;ֹͣ²É¼¯ void SpectralSignal(int);//·¢Éä1´ú±íÕýÔÚµ÷½¹£¬»æÖƹâÆ×£¬·¢Éä0±íʾµ÷½¹Íê³É£» + void RecordWhiteFinishSignal(); + void RecordDarlFinishSignal(); + void testImagerStatus();//±íʾ¿ÉÒÔ²âÊÔÏà»úÁ¬½Ó״̬£ºÊÇ·ñÁ¬½Ó£¬²¢·´Ó³µ½½çÃæÉÏ }; diff --git a/HPPA/PathPlan.cpp b/HPPA/PathPlan.cpp index d24aa68..1c40561 100644 --- a/HPPA/PathPlan.cpp +++ b/HPPA/PathPlan.cpp @@ -294,7 +294,7 @@ void PathPlan::onReadRecordLineFile_btn() { for (size_t j = 0; j < ui.recordLine_tableWidget->columnCount(); j++) { - QTableWidgetItem* tmp = new QTableWidgetItem(QString::number(data[i * ui.recordLine_tableWidget->columnCount() + j], 10, 2)); + QTableWidgetItem* tmp = new QTableWidgetItem(QString::number(data[i * ui.recordLine_tableWidget->columnCount() + j], 10, 5)); tmp->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.recordLine_tableWidget->setItem(i, j, tmp); } diff --git a/HPPA/ResononNirImager.cpp b/HPPA/ResononNirImager.cpp index 440173b..eac5d56 100644 --- a/HPPA/ResononNirImager.cpp +++ b/HPPA/ResononNirImager.cpp @@ -191,18 +191,60 @@ void ResononNirImager::record_dark() std::cout << "²É¼¯°µµçÁ÷£¡£¡£¡£¡£¡£¡£¡£¡£¡" << std::endl; reConnectImage(); imagerStartCollect(); - getFrame(dark); + + unsigned int* dark_tmp = new unsigned int[m_FrameSize]; + std::fill(dark_tmp, dark_tmp + m_FrameSize, 0); + + int counter = 50; + for (size_t i = 0; i < counter; i++) + { + getFrame(dark); + + for (size_t j = 0; j < m_FrameSize; j++) + { + dark_tmp[j] = dark[j] + dark_tmp[j]; + } + } + + for (size_t j = 0; j < m_FrameSize; j++) + { + dark[j] = (unsigned short)(dark_tmp[j] / counter); + } + delete[] dark_tmp; + imagerStopCollect(); m_HasDark = true; + + emit RecordDarlFinishSignal(); } void ResononNirImager::record_white() { - std::cout << "²É¼¯°µ°×°å£¡£¡£¡£¡£¡£¡£¡£¡£¡" << std::endl; + std::cout << "²É¼¯°×°å£¡£¡£¡£¡£¡£¡£¡£¡£¡" << std::endl; reConnectImage(); imagerStartCollect(); - getFrame(white); + + unsigned int* white_tmp = new unsigned int[m_FrameSize]; + std::fill(white_tmp, white_tmp + m_FrameSize, 0); + + int counter = 50; + for (size_t i = 0; i < counter; i++) + { + getFrame(white); + + for (size_t j = 0; j < m_FrameSize; j++) + { + white_tmp[j] = white[j] + white_tmp[j]; + } + } + + for (size_t j = 0; j < m_FrameSize; j++) + { + white[j] = (unsigned short)(white_tmp[j] / counter); + } + delete[] white_tmp; + imagerStopCollect(); //°×°å¿Û°µµçÁ÷ @@ -222,6 +264,8 @@ void ResononNirImager::record_white() } m_HasWhite = true; + + emit RecordWhiteFinishSignal(); } void ResononNirImager::start_record() @@ -243,7 +287,7 @@ void ResononNirImager::start_record() FileOperation* fileOperation = new FileOperation(); string directory = fileOperation->getDirectoryFromString(); - string imgPath = directory + "\\" + m_FileName2Save + "_" + std::to_string(m_FileSavedCounter); + string imgPath = directory + "\\" + m_FileName2Save + "_" + std::to_string(m_FileSavedCounter)+".bil"; FILE* m_fImage = fopen(imgPath.c_str(), "w+b"); diff --git a/HPPA/about.ui b/HPPA/about.ui index a4363c6..aea0e4f 100644 --- a/HPPA/about.ui +++ b/HPPA/about.ui @@ -70,7 +70,7 @@ - 版本:1.8.1 + 版本:1.8.2