158 m_Controls->m_StartRecordingButton->setChecked(
true);
159 m_Controls->m_RecorderGroupBox->setEnabled(
false);
162 int numOfFrames =
m_Controls->m_NumOfFramesSpinBox->value();
166 bool distanceImageSelected =
true;
167 bool amplitudeImageSelected =
false;
168 bool intensityImageSelected =
false;
169 bool rgbImageSelected =
false;
170 bool rawDataSelected =
false;
173 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasAmplitudeImage",amplitudeImageSelected);
174 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasIntensityImage",intensityImageSelected);
175 m_ToFImageGrabber->GetCameraDevice()->GetBoolProperty(
"HasRGBImage",rgbImageSelected);
177 QString tmpFileName(
"");
178 QString selectedFilter(
"");
179 QString imageFileName(
"");
182 distanceImageSelected, amplitudeImageSelected, intensityImageSelected, rgbImageSelected, rawDataSelected,
183 nullptr,
"Save Image To...", imageFileName,
"NRRD Images (*.nrrd);;Text (*.csv)", &selectedFilter);
185 if (tmpFileName.isEmpty())
191 imageFileName = tmpFileName;
196 std::string dir = itksys::SystemTools::GetFilenamePath( imageFileName.toStdString() );
197 std::string baseFilename = itksys::SystemTools::GetFilenameWithoutLastExtension( imageFileName.toStdString() );
198 std::string extension = itksys::SystemTools::GetFilenameLastExtension( imageFileName.toStdString() );
203 QString integrationTimeStr;
204 integrationTimeStr.setNum(integrationTime);
205 QString modulationFreqStr;
206 modulationFreqStr.setNum(modulationFreq);
207 QString numOfFramesStr(
"");
210 numOfFramesStr.setNum(numOfFrames);
213 std::string distImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
214 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_DistanceImage");
215 MITK_INFO <<
"Save distance data to: " << distImageFileName;
217 std::string amplImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
218 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_AmplitudeImage");
219 MITK_INFO <<
"Save amplitude data to: " << amplImageFileName;
221 std::string intenImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
222 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_IntensityImage");
223 MITK_INFO <<
"Save intensity data to: " << intenImageFileName;
225 std::string rgbImageFileName =
prepareFilename(dir, baseFilename, modulationFreqStr.toStdString(),
226 integrationTimeStr.toStdString(), numOfFramesStr.toStdString(), extension,
"_RGBImage");
227 MITK_INFO <<
"Save intensity data to: " << rgbImageFileName;
229 if (selectedFilter.compare(
"Text (*.csv)") == 0)
233 else if (selectedFilter.compare(
"NRRD Images (*.nrrd)") == 0)
239 QMessageBox::warning(
nullptr,
"Unsupported file format!",
"Please specify one of the supported file formats *.nrrd, *.csv!");
243 numOfFrames =
m_Controls->m_NumOfFramesSpinBox->value();
264 catch(std::exception& e)
266 QMessageBox::critical(
nullptr,
"Error", QString(e.what()));
272 bool& distanceImageSelected,
273 bool& amplitudeImageSelected,
274 bool& intensityImageSelected,
275 bool& rgbImageSelected,
276 bool& rawDataSelected,
278 const QString &caption,
280 const QString &filter,
281 QString *selectedFilter,
285 QString selectedFileName =
"";
286 QComboBox* combo =
new QComboBox;
287 combo->addItem(
"3D");
288 combo->addItem(
"2D + t");
290 QHBoxLayout* checkBoxGroup =
new QHBoxLayout();
292 QCheckBox* distanceImageCheckBox =
new QCheckBox;
293 distanceImageCheckBox->setText(
"Distance image");
294 distanceImageCheckBox->setChecked(distanceImageSelected);
296 QCheckBox* amplitudeImageCheckBox =
new QCheckBox;
297 amplitudeImageCheckBox->setText(
"Amplitude image");
298 amplitudeImageCheckBox->setChecked(amplitudeImageSelected);
299 amplitudeImageCheckBox->setEnabled(amplitudeImageSelected);
300 if(!amplitudeImageSelected)
301 amplitudeImageCheckBox->setToolTip(QString(
"This device does not provide amplitude data."));
303 QCheckBox* intensityImageCheckBox =
new QCheckBox;
304 intensityImageCheckBox->setText(
"Intensity image");
305 intensityImageCheckBox->setChecked(intensityImageSelected);
306 intensityImageCheckBox->setEnabled(intensityImageSelected);
307 if(!intensityImageSelected)
308 intensityImageCheckBox->setToolTip(QString(
"This device does not provide intensity data."));
310 QCheckBox* rgbImageCheckBox =
new QCheckBox;
311 rgbImageCheckBox->setText(
"RGB image");
312 rgbImageCheckBox->setChecked(rgbImageSelected);
313 rgbImageCheckBox->setEnabled(rgbImageSelected);
314 if(!rgbImageSelected)
315 rgbImageCheckBox->setToolTip(QString(
"This device does not provide RGB data."));
317 QCheckBox* rawDataCheckBox =
new QCheckBox;
318 rawDataCheckBox->setText(
"Raw data");
319 rawDataCheckBox->setChecked(
false);
320 rawDataCheckBox->setEnabled(
false);
322 checkBoxGroup->addWidget(distanceImageCheckBox);
323 checkBoxGroup->addWidget(amplitudeImageCheckBox);
324 checkBoxGroup->addWidget(intensityImageCheckBox);
325 checkBoxGroup->addWidget(rgbImageCheckBox);
326 checkBoxGroup->addWidget(rawDataCheckBox);
328 QFileDialog* fileDialog =
new QFileDialog(parent, caption, dir, filter);
330 QLayout* layout = fileDialog->layout();
331 QGridLayout* gridbox = qobject_cast<QGridLayout*>(layout);
335 gridbox->addWidget(
new QLabel(
"ToF-Image type:"));
336 gridbox->addWidget(combo);
337 int lastRow = gridbox->rowCount();
338 gridbox->addLayout(checkBoxGroup, lastRow, 0, 1, -1);
341 fileDialog->setLayout(gridbox);
342 fileDialog->setAcceptMode(QFileDialog::AcceptSave);
346 fileDialog->selectNameFilter(*selectedFilter);
349 if (fileDialog->exec() == QDialog::Accepted)
353 *selectedFilter = fileDialog->selectedNameFilter();
356 if (combo->currentIndex() == 0)
366 distanceImageSelected = distanceImageCheckBox->isChecked();
367 amplitudeImageSelected = amplitudeImageCheckBox->isChecked();
368 intensityImageSelected = intensityImageCheckBox->isChecked();
369 rgbImageSelected = rgbImageCheckBox->isChecked();
370 rawDataSelected = rawDataCheckBox->isChecked();
372 selectedFileName = fileDialog->selectedFiles().value(0);
376 return selectedFileName;
380 std::string baseFilename,
381 std::string modulationFreq,
382 std::string integrationTime,
383 std::string numOfFrames,
384 std::string extension,
385 std::string imageType)
387 std::string filenName(
"");
388 filenName.append(dir);
389 filenName.append(
"/");
390 filenName.append(baseFilename);
391 filenName.append(
"_MF");
392 filenName.append(modulationFreq);
393 filenName.append(
"_IT");
394 filenName.append(integrationTime);
395 filenName.append(
"_");
396 filenName.append(numOfFrames);
397 filenName.append(
"Images");
398 filenName.append(imageType);
399 filenName.append(extension);