]> Creatis software - clitk.git/blob - vv/vvLabelImageLoaderWidget.cxx
widget to load binary image
[clitk.git] / vv / vvLabelImageLoaderWidget.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
9   This software is distributed WITHOUT ANY WARRANTY; without even
10   the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11   PURPOSE.  See the copyright notices for more information.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18 #ifndef VVTOOLINPUTSELECTORWIDGET_CXX
19 #define VVTOOLINPUTSELECTORWIDGET_CXX
20
21 // vv
22 #include "vvLabelImageLoaderWidget.h"
23 #include "vvSlicerManager.h"
24 #include "vvImageReader.h"
25 #include "vvImageWriter.h"
26
27 // vtk
28 #include <vtkImageData.h>
29
30 // qt
31 #include <QAbstractButton>
32 #include <QFileDialog>
33 #include <QMessageBox>
34
35 //------------------------------------------------------------------------------
36 vvLabelImageLoaderWidget::vvLabelImageLoaderWidget(QWidget * parent, Qt::WindowFlags f):
37   QWidget(parent, f)
38 {
39   setupUi(this);
40   setEnabled(true);
41   connect(mOpenButton, SIGNAL(clicked()), this, SLOT(OpenImage()));
42 }
43 //------------------------------------------------------------------------------
44
45
46 //------------------------------------------------------------------------------
47 vvImage::Pointer vvLabelImageLoaderWidget::GetImage()
48 {
49   return m_Output;
50 }
51 //------------------------------------------------------------------------------
52
53
54 //------------------------------------------------------------------------------
55 double vvLabelImageLoaderWidget::GetBackgroundValue()
56 {
57   return mBackgroundValueSpinBox->value();
58 }
59 //------------------------------------------------------------------------------
60
61
62 //------------------------------------------------------------------------------
63 void vvLabelImageLoaderWidget::OpenImage()
64 {
65   DD("OpenImage");
66
67   // Browse for file
68   QString Extensions = "Images files ( *.mhd *.hdr *.his)";
69   Extensions += ";;All Files (*)";
70   QString filename =
71     QFileDialog::getOpenFileName(this,tr("Open mask image"),
72                                  "",Extensions); //mMainWindow->GetInputPathName()
73   if (filename == "") return; // nothing to do
74   
75   // Open Image
76   vvImageReader * mReader = new vvImageReader;
77   mReader->SetInputFilename(filename.toStdString());
78   mReader->Update(IMAGE);
79   if (mReader->GetLastError().size() != 0) {
80     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
81     QString error = "Cannot open file \n";
82     error += mReader->GetLastError().c_str();
83     QMessageBox::information(this,tr("Reading problem"),error);
84     delete mReader;
85     return;
86   }
87   
88   // Create output pointer
89   m_Output = vvImage::New();
90
91   // Check type and convert if needed
92   vvImage::Pointer temp = mReader->GetOutput();
93
94   if (temp->GetNumberOfDimensions() != 3) {
95     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
96     QString error;
97     error = QString("Cannot open file %1 because it is not 3D\n").arg(filename);
98     QMessageBox::information(this,tr("Reading problem"),error);
99     delete mReader;
100     return;
101   }
102
103   DD(temp->GetScalarTypeAsITKString());
104   if (temp->GetScalarTypeAsITKString() != "unsigned_char") {
105     DD("Cast");
106     vtkImageData * p = vtkImageData::New();
107     p->SetExtent(temp->GetFirstVTKImageData()->GetExtent ()); // Only first ! could not be 4D
108     p->SetScalarTypeToUnsignedChar();
109     p->AllocateScalars ();
110     p->CopyAndCastFrom(temp->GetFirstVTKImageData(), temp->GetFirstVTKImageData()->GetExtent ());
111     m_Output->AddImage(p);
112     vvImageWriter * writer = new vvImageWriter;
113     writer->SetOutputFileName("a.mhd");
114     writer->SetInput(m_Output);
115     writer->Update();
116   }
117   else {
118     m_Output = temp;
119   }
120   
121   // Set GUI
122   mLabelInputInfo->setText(vtksys::SystemTools::GetFilenameName(filename.toStdString()).c_str());
123   emit accepted();
124 }
125 //------------------------------------------------------------------------------
126
127
128 #endif
129