X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvLabelImageLoaderWidget.cxx;h=96688ff001438252b2b9066541d16e682fb19bd0;hb=58f6f4201ec9091b5150f6576da25bfedeabbdce;hp=b10f00ffb813e0eb2ebc2447fb85cec6a2b81af5;hpb=558ee3aac5989966a5695cf1ab361317bccfcc4a;p=clitk.git diff --git a/vv/vvLabelImageLoaderWidget.cxx b/vv/vvLabelImageLoaderWidget.cxx index b10f00f..96688ff 100644 --- a/vv/vvLabelImageLoaderWidget.cxx +++ b/vv/vvLabelImageLoaderWidget.cxx @@ -3,7 +3,7 @@ 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 @@ -14,10 +14,14 @@ - 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 + // vv #include "vvLabelImageLoaderWidget.h" #include "vvSlicerManager.h" @@ -60,10 +64,16 @@ double vvLabelImageLoaderWidget::GetBackgroundValue() //------------------------------------------------------------------------------ -void vvLabelImageLoaderWidget::OpenImage() +void vvLabelImageLoaderWidget::SetText(QString t) { - DD("OpenImage"); + mOpenLabel->setText(t); +} +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +void vvLabelImageLoaderWidget::OpenImage() +{ // Browse for file QString Extensions = "Images files ( *.mhd *.hdr *.his)"; Extensions += ";;All Files (*)"; @@ -72,54 +82,49 @@ void vvLabelImageLoaderWidget::OpenImage() "",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(); } //------------------------------------------------------------------------------