Authors belong to:
- University of LYON http://www.universite-lyon.fr/
- - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
+ - Léon Bérard cancer center http://www.centreleonberard.fr
- CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
This software is distributed WITHOUT ANY WARRANTY; without even
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
#ifndef VVTOOLINPUTSELECTORWIDGET_CXX
#define VVTOOLINPUTSELECTORWIDGET_CXX
+// clitk
+#include <clitkImageCommon.h>
+
// vv
#include "vvLabelImageLoaderWidget.h"
#include "vvSlicerManager.h"
//------------------------------------------------------------------------------
void vvLabelImageLoaderWidget::OpenImage()
{
- DD("OpenImage");
-
// Browse for file
QString Extensions = "Images files ( *.mhd *.hdr *.his)";
Extensions += ";;All Files (*)";
"",Extensions); //mMainWindow->GetInputPathName()
if (filename == "") return; // nothing to do
+ itk::ImageIOBase::Pointer header = clitk::readImageHeader(filename.toStdString());
+
// Open Image
- vvImageReader * mReader = new vvImageReader;
- mReader->SetInputFilename(filename.toStdString());
- mReader->Update(IMAGE);
- if (mReader->GetLastError().size() != 0) {
+ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ if (!header) {
std::cerr << "Error while reading " << filename.toStdString() << std::endl;
- QString error = "Cannot open file \n";
- error += mReader->GetLastError().c_str();
+ QString error = QString("Cannot open file %1\n").arg(filename);
QMessageBox::information(this,tr("Reading problem"),error);
- delete mReader;
return;
}
// Create output pointer
- m_Output = vvImage::New();
-
- // Check type and convert if needed
- vvImage::Pointer temp = mReader->GetOutput();
-
- if (temp->GetNumberOfDimensions() != 3) {
+ if (header->GetNumberOfDimensions() != 3) {
std::cerr << "Error while reading " << filename.toStdString() << std::endl;
QString error;
error = QString("Cannot open file %1 because it is not 3D\n").arg(filename);
QMessageBox::information(this,tr("Reading problem"),error);
- delete mReader;
return;
}
- DD(temp->GetScalarTypeAsITKString());
- if (temp->GetScalarTypeAsITKString() != "unsigned_char") {
- DD("Cast");
- vtkImageData * p = vtkImageData::New();
- p->SetExtent(temp->GetFirstVTKImageData()->GetExtent ()); // Only first ! could not be 4D
- p->SetScalarTypeToUnsignedChar();
- p->AllocateScalars ();
- p->CopyAndCastFrom(temp->GetFirstVTKImageData(), temp->GetFirstVTKImageData()->GetExtent ());
- m_Output->AddImage(p);
- vvImageWriter * writer = new vvImageWriter;
- writer->SetOutputFileName("a.mhd");
- writer->SetInput(m_Output);
- writer->Update();
+ // Convert to unsigned char while reading (if not already)
+ typedef itk::ImageFileReader< itk::Image< unsigned char, 3 > > ReaderType;
+ ReaderType::Pointer reader = ReaderType::New();
+ reader->SetFileName(filename.toStdString());
+ reader->Update();
+
+ // Create vv image
+ m_Output = vvImage::New();
+ try {
+ m_Output->AddItkImage( reader->GetOutput() );
}
- else {
- m_Output = temp;
+ catch ( itk::ExceptionObject & err ) {
+ std::cerr << "Error while reading " << filename.toStdString() << std::endl
+ << "The error is " << err << std::endl;
+ QString error;
+ error = QString("Cannot open file %1\n").arg(filename);
+ QMessageBox::information(this,tr("Reading problem"),error);
+ return;
}
-
+
// Set GUI
mLabelInputInfo->setText(vtksys::SystemTools::GetFilenameName(filename.toStdString()).c_str());
+ QApplication::restoreOverrideCursor();
emit accepted();
}
//------------------------------------------------------------------------------