]> Creatis software - clitk.git/blob - vv/vvImageReader.cxx
61609ceb546d9e970ad7cde34be4e46a481f42a0
[clitk.git] / vv / vvImageReader.cxx
1 #ifndef vvImageReader_CXX
2 #define vvImageReader_CXX
3 #include <QApplication>
4 #include <itkImageFileReader.h>
5 #include "vvImageReader.h"
6 #include "vvImageReader.txx"
7
8
9 //====================================================================
10 vvImageReader::vvImageReader()
11 {
12     mImage = NULL;
13     mInputFilenames.resize(0);
14     mLastError = "";
15     mType = UNDEFINEDIMAGETYPE;
16 }
17
18 vvImageReader::~vvImageReader() { }
19
20 void vvImageReader::Update()
21 {
22     Update(mType);
23 }
24
25 void vvImageReader::Update(LoadedImageType type)
26 {
27     itk::ImageIOBase::Pointer reader = itk::ImageIOFactory::CreateImageIO(mInputFilenames[0].c_str(), itk::ImageIOFactory::ReadMode);
28     if (!reader) {
29         mLastError="Unable to read file.";
30     }
31     else {
32         reader->SetFileName(mInputFilenames[0]);
33         reader->ReadImageInformation();
34         if (mInputFilenames.size() > 1)
35             Update(reader->GetNumberOfDimensions()+1,reader->GetComponentTypeAsString(reader->GetComponentType()),type);
36         else
37             Update(reader->GetNumberOfDimensions(),reader->GetComponentTypeAsString(reader->GetComponentType()),type);
38     }
39 }
40
41 //====================================================================
42 void vvImageReader::Update(int dim,std::string inputPixelType, LoadedImageType type) {
43     //CALL_FOR_ALL_DIMS(dim,UpdateWithDim,inputPixelType);
44     mType = type;
45     mDim = dim;
46     mInputPixelType=inputPixelType;
47     this->start(); //Start heavy read operation in a separate thread
48     while (this->isRunning())
49     {
50         qApp->processEvents();
51         this->wait(50);
52     }
53 }
54
55 void vvImageReader::run()
56 {
57     switch(mDim)
58     {
59         case 2:
60             UpdateWithDim<2>(mInputPixelType);
61             break;;
62         case 3:
63             UpdateWithDim<3>(mInputPixelType);
64             break;;
65         case 4:
66             UpdateWithDim<4>(mInputPixelType);
67             break;;
68         default:
69             std::cerr << "dimension unknown in Update ! " << std::endl;
70     }
71 }
72 //====================================================================
73
74 //====================================================================
75 /*void vvImageReader::Extract(int dim, std::string inputPixelType, int slice) {
76   CALL_FOR_ALL_DIMS(dim, ExtractWithDim, inputPixelType, slice);
77 }*/
78 //====================================================================
79 void vvImageReader::SetInputFilename(const std::string & filename)
80 {
81     mInputFilenames.resize(0);
82     mInputFilenames.push_back(filename);
83 }
84
85 //====================================================================
86 void vvImageReader::SetInputFilenames(const std::vector<std::string> & filenames) {
87     mInputFilenames = filenames;
88 }
89 //====================================================================
90
91 #endif
92