1 #include <creaImageIOImageReader.h>
2 #include <creaImageIOTreeAttributeDescriptor.h>
3 #include <creaImageIOSystem.h>
5 #include <creaImageIOVtkImageReader.h>
7 #include <creaImageIODicomImageReader.h>
10 #include <creaImageIODicomImageReader2.h>
12 #include <creaImageIOUltrasonixImageReader.h>
13 #include <vtkPNGReader.h>
14 #include <vtkTIFFReader.h>
15 #include <vtkJPEGReader.h>
16 #include <vtkBMPReader.h>
17 #include <vtkSLCReader.h>
18 #include <vtkMetaImageReader.h>
19 //#include <vtkGESignalReader.h>
21 #include "boost/filesystem/path.hpp"
26 //=====================================================================
27 ImageReader::ImageReader()
30 mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
32 // std::cout << "#### ImageReader::ImageReader()"<<std::endl;
33 if (mUnreadableImage!=0) return;
36 Register( boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkPNGReader::New() , "PNG", ".png")));
37 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg")));
38 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkJPEGReader::New())));
39 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkBMPReader::New())));
40 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkSLCReader::New())));
41 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd")));
42 // Register(new VtkImageReader(vtkGESignalReader::New()));
43 Register(boost::shared_ptr<AbstractImageReader>(new DicomImageReader));
44 Register(boost::shared_ptr<AbstractImageReader>(new UltrasonixImageReader));
48 mUnreadableImage = vtkImageData::New();
50 dim[0] = dim[1] = 128;
52 mUnreadableImage->SetDimensions ( dim );
53 mUnreadableImage->SetScalarTypeToUnsignedChar();
54 mUnreadableImage->AllocateScalars();
55 for (int i=0;i<dim[0];i++)
56 for (int j=0;j<dim[1];j++)
57 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
58 for (int i=0;i<dim[0];i++)
60 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
61 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
64 //=====================================================================
66 //=====================================================================
67 ImageReader::~ImageReader()
70 // for (i=mReader.begin(); i!=mReader.end(); i++)
75 if (mUnreadableImage!=0)
77 mUnreadableImage->Delete();
81 //=====================================================================
83 //=====================================================================
84 void ImageReader::Register(boost::shared_ptr<AbstractImageReader> r)
90 void ImageReader::UnRegister(const std::string i_val)
92 mUnReader.push_back(i_val);
95 //=====================================================================
97 //=====================================================================
98 // Returns true iff the file is readable
99 bool ImageReader::ShallNotRead( const std::string& filename )
104 std::vector<std::string >::iterator i ;
105 for (i=mUnReader.begin(); i!=mUnReader.end(); i++)
108 if ( (*i).c_str() == filename)
118 //=====================================================================
119 // Returns true iff the file is readable
120 bool ImageReader::CanRead( const std::string& filename )
124 if( !ShallNotRead(filename))
130 std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
131 for (i=mReader.begin(); i!=mReader.end(); i++)
133 ok = (*i)->CanRead(filename);
136 mLastFilename = filename;
144 //=====================================================================
146 //=====================================================================
147 // Reads the file (CanRead must be called before : no test here)
148 vtkImageData* ImageReader::ReadImage( const std::string& filename)
150 if (mLastFilename!=filename)
152 if (!CanRead(filename))
154 vtkImageData* im = vtkImageData::New();
155 im->ShallowCopy(mUnreadableImage);
159 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
162 i = vtkImageData::New();
163 i->ShallowCopy(mUnreadableImage);
167 //=====================================================================
168 // Another function to read attributes for a file
169 void ImageReader::getAttributes(const std::string filename,
170 std::map <std::string , std::string> &infos, std::vector<std::string> i_attr)
172 if (mLastFilename!=filename)
174 if (!CanRead(filename))
179 mLastReader->getAttributes(filename, infos, i_attr);
181 //=====================================================================
182 void ImageReader::ReadAttributes(const std::string& filename,
183 std::map<std::string,std::string>& attr)
185 if (mLastFilename!=filename)
187 if (!CanRead(filename))
192 mLastReader->ReadAttributes(mLastFilename,attr);
194 //=====================================================================
197 //=====================================================================
198 /// Pushes back all kwown extensions (without dot) in the vector given
199 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
201 std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
202 for (i=mReader.begin(); i!=mReader.end(); i++)
204 (*i)->PushBackExtensions(v);
207 //=====================================================================
209 } // namespace creaImageIO