]> Creatis software - clitk.git/blob - vv/vvLabelImageLoaderWidget.cxx
some small correction
[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
19 #ifndef VVTOOLINPUTSELECTORWIDGET_CXX
20 #define VVTOOLINPUTSELECTORWIDGET_CXX
21
22 // vv
23 #include "vvLabelImageLoaderWidget.h"
24 #include "vvSlicerManager.h"
25 #include "vvImageReader.h"
26 #include "vvImageWriter.h"
27
28 // vtk
29 #include <vtkImageData.h>
30
31 // qt
32 #include <QAbstractButton>
33 #include <QFileDialog>
34 #include <QMessageBox>
35
36 //------------------------------------------------------------------------------
37 vvLabelImageLoaderWidget::vvLabelImageLoaderWidget(QWidget * parent, Qt::WindowFlags f):
38   QWidget(parent, f)
39 {
40   setupUi(this);
41   setEnabled(true);
42   connect(mOpenButton, SIGNAL(clicked()), this, SLOT(OpenImage()));
43 }
44 //------------------------------------------------------------------------------
45
46
47 //------------------------------------------------------------------------------
48 vvImage::Pointer vvLabelImageLoaderWidget::GetImage()
49 {
50   return m_Output;
51 }
52 //------------------------------------------------------------------------------
53
54
55 //------------------------------------------------------------------------------
56 double vvLabelImageLoaderWidget::GetBackgroundValue()
57 {
58   return mBackgroundValueSpinBox->value();
59 }
60 //------------------------------------------------------------------------------
61
62
63 //------------------------------------------------------------------------------
64 void vvLabelImageLoaderWidget::SetText(QString t)
65 {
66   mOpenLabel->setText(t);
67 }
68 //------------------------------------------------------------------------------
69
70
71 //------------------------------------------------------------------------------
72 void vvLabelImageLoaderWidget::OpenImage()
73 {
74   DD("OpenImage");
75
76   // Browse for file
77   QString Extensions = "Images files ( *.mhd *.hdr *.his)";
78   Extensions += ";;All Files (*)";
79   QString filename =
80     QFileDialog::getOpenFileName(this,tr("Open mask image"),
81                                  "",Extensions); //mMainWindow->GetInputPathName()
82   if (filename == "") return; // nothing to do
83   
84   // Open Image
85   vvImageReader * mReader = new vvImageReader;
86   mReader->SetInputFilename(filename.toStdString());
87   mReader->Update(IMAGE);
88   if (mReader->GetLastError().size() != 0) {
89     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
90     QString error = "Cannot open file \n";
91     error += mReader->GetLastError().c_str();
92     QMessageBox::information(this,tr("Reading problem"),error);
93     delete mReader;
94     return;
95   }
96   
97   // Create output pointer
98   m_Output = vvImage::New();
99
100   // Check type and convert if needed
101   vvImage::Pointer temp = mReader->GetOutput();
102
103   if (temp->GetNumberOfDimensions() != 3) {
104     std::cerr << "Error while reading " << filename.toStdString() << std::endl;
105     QString error;
106     error = QString("Cannot open file %1 because it is not 3D\n").arg(filename);
107     QMessageBox::information(this,tr("Reading problem"),error);
108     delete mReader;
109     return;
110   }
111
112   DD(temp->GetScalarTypeAsITKString());
113   if (temp->GetScalarTypeAsITKString() != "unsigned_char") {
114     DD("Cast");
115     vtkImageData * p = vtkImageData::New();
116     p->SetExtent(temp->GetFirstVTKImageData()->GetExtent ()); // Only first ! could not be 4D
117     p->SetScalarTypeToUnsignedChar();
118     p->AllocateScalars ();
119     p->CopyAndCastFrom(temp->GetFirstVTKImageData(), temp->GetFirstVTKImageData()->GetExtent ());
120     m_Output->AddImage(p);
121     vvImageWriter * writer = new vvImageWriter;
122     writer->SetOutputFileName("a.mhd");
123     writer->SetInput(m_Output);
124     writer->Update();
125   }
126   else {
127     m_Output = temp;
128   }
129   
130   // Set GUI
131   mLabelInputInfo->setText(vtksys::SystemTools::GetFilenameName(filename.toStdString()).c_str());
132   emit accepted();
133 }
134 //------------------------------------------------------------------------------
135
136
137 #endif
138