1 #include <creaImageIOImageReader.h>
2 #include <creaImageIOTreeAttributeDescriptor.h>
3 #include <creaImageIOSystem.h>
5 #include <creaImageIOVtkImageReader.h>
6 #include <creaImageIODicomImageReader.h>
7 #include <creaImageIOUltrasonixImageReader.h>
9 #include <vtkPNGReader.h>
10 #include <vtkTIFFReader.h>
11 #include <vtkJPEGReader.h>
12 #include <vtkBMPReader.h>
13 #include <vtkSLCReader.h>
14 #include <vtkMetaImageReader.h>
15 //#include <vtkGESignalReader.h>
18 #include "boost/filesystem/path.hpp"
27 //=====================================================================
28 ImageReader::ImageReader()
31 mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
33 // std::cout << "#### ImageReader::ImageReader()"<<std::endl;
34 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));
47 mUnreadableImage = vtkImageData::New();
49 dim[0] = dim[1] = 128;
51 mUnreadableImage->SetDimensions ( dim );
52 mUnreadableImage->SetScalarTypeToUnsignedChar();
53 mUnreadableImage->AllocateScalars();
54 for (int i=0;i<dim[0];i++)
55 for (int j=0;j<dim[1];j++)
56 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
57 for (int i=0;i<dim[0];i++)
59 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
60 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
66 //=====================================================================
68 //=====================================================================
69 ImageReader::~ImageReader()
72 // for (i=mReader.begin(); i!=mReader.end(); i++)
77 if (mUnreadableImage!=0)
79 mUnreadableImage->Delete();
83 //=====================================================================
85 //=====================================================================
86 void ImageReader::Register(boost::shared_ptr<AbstractImageReader> r)
91 //=====================================================================
93 //=====================================================================
94 // Returns true iff the file is readable
95 bool ImageReader::CanRead( const std::string& filename )
100 std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
101 for (i=mReader.begin(); i!=mReader.end(); i++)
103 ok = (*i)->CanRead(filename);
106 mLastFilename = filename;
115 //=====================================================================
117 //=====================================================================
118 // Reads the file (CanRead must be called before : no test here)
119 vtkImageData* ImageReader::ReadImage( const std::string& filename)
121 if (mLastFilename!=filename)
123 if (!CanRead(filename))
125 vtkImageData* im = vtkImageData::New();
126 im->ShallowCopy(mUnreadableImage);
130 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
133 i = vtkImageData::New();
134 i->ShallowCopy(mUnreadableImage);
138 //=====================================================================
141 //=====================================================================
142 void ImageReader::ReadAttributes(const std::string& filename,
143 std::map<std::string,std::string>& attr)
145 if (mLastFilename!=filename)
147 if (!CanRead(filename))
152 mLastReader->ReadAttributes(mLastFilename,attr);
154 //=====================================================================
157 //=====================================================================
158 /// Pushes back all kwown extensions (without dot) in the vector given
159 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
161 std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
162 for (i=mReader.begin(); i!=mReader.end(); i++)
164 (*i)->PushBackExtensions(v);
167 //=====================================================================
169 } // namespace creaImageIO