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>
22 #include "boost/filesystem/path.hpp"
31 //=====================================================================
32 ImageReader::ImageReader()
35 mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
37 // std::cout << "#### ImageReader::ImageReader()"<<std::endl;
38 if (mUnreadableImage!=0) return;
40 Register( boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkPNGReader::New(), "PNG", ".png")));
41 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg")));
42 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkJPEGReader::New())));
43 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkBMPReader::New())));
44 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkSLCReader::New())));
45 Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd")));
46 // Register(new VtkImageReader(vtkGESignalReader::New()));
47 Register(boost::shared_ptr<AbstractImageReader>(new DicomImageReader));
48 Register(boost::shared_ptr<AbstractImageReader>(new UltrasonixImageReader));
52 mUnreadableImage = vtkImageData::New();
54 dim[0] = dim[1] = 128;
56 mUnreadableImage->SetDimensions ( dim );
57 mUnreadableImage->SetScalarTypeToUnsignedChar();
58 mUnreadableImage->AllocateScalars();
59 for (int i=0;i<dim[0];i++)
60 for (int j=0;j<dim[1];j++)
61 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
62 for (int i=0;i<dim[0];i++)
64 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
65 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
71 //=====================================================================
73 //=====================================================================
74 ImageReader::~ImageReader()
77 // for (i=mReader.begin(); i!=mReader.end(); i++)
82 if (mUnreadableImage!=0)
84 mUnreadableImage->Delete();
88 //=====================================================================
90 //=====================================================================
91 void ImageReader::Register(boost::shared_ptr<AbstractImageReader> r)
97 void ImageReader::UnRegister(const std::string i_val)
99 mUnReader.push_back(i_val);
102 //=====================================================================
104 //=====================================================================
105 // Returns true iff the file is readable
106 bool ImageReader::ShallNotRead( const std::string& filename )
111 std::vector<std::string >::iterator i ;
112 for (i=mUnReader.begin(); i!=mUnReader.end(); i++)
115 if ( (*i).c_str() == filename)
127 //=====================================================================
128 // Returns true iff the file is readable
129 bool ImageReader::CanRead( const std::string& filename )
133 if( !ShallNotRead(filename))
139 std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
140 for (i=mReader.begin(); i!=mReader.end(); i++)
142 ok = (*i)->CanRead(filename);
145 mLastFilename = filename;
154 //=====================================================================
156 //=====================================================================
157 // Reads the file (CanRead must be called before : no test here)
158 vtkImageData* ImageReader::ReadImage( const std::string& filename)
160 if (mLastFilename!=filename)
162 if (!CanRead(filename))
164 vtkImageData* im = vtkImageData::New();
165 im->ShallowCopy(mUnreadableImage);
169 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
172 i = vtkImageData::New();
173 i->ShallowCopy(mUnreadableImage);
177 //=====================================================================
180 //=====================================================================
181 void ImageReader::ReadAttributes(const std::string& filename,
182 std::map<std::string,std::string>& attr)
184 if (mLastFilename!=filename)
186 if (!CanRead(filename))
191 mLastReader->ReadAttributes(mLastFilename,attr);
193 //=====================================================================
196 //=====================================================================
197 /// Pushes back all kwown extensions (without dot) in the vector given
198 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
200 std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
201 for (i=mReader.begin(); i!=mReader.end(); i++)
203 (*i)->PushBackExtensions(v);
206 //=====================================================================
208 } // namespace creaImageIO