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>
19 #include "boost/filesystem/path.hpp"
28 //=====================================================================
29 ImageReader::ImageReader()
32 mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"),
36 // std::cout << "#### ImageReader::ImageReader()"<<std::endl;
37 if (mUnreadableImage!=0) return;
39 Register(new VtkImageReader(vtkPNGReader::New()));
40 Register(new VtkImageReader(vtkTIFFReader::New()));
41 Register(new VtkImageReader(vtkJPEGReader::New()));
42 Register(new VtkImageReader(vtkBMPReader::New()));
43 Register(new VtkImageReader(vtkSLCReader::New()));
44 Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd"));
45 // Register(new VtkImageReader(vtkGESignalReader::New()));
46 Register(new DicomImageReader);
47 Register(new UltrasonixImageReader);
50 mUnreadableImage = vtkImageData::New();
52 dim[0] = dim[1] = 128;
54 mUnreadableImage->SetDimensions ( dim );
55 mUnreadableImage->SetScalarTypeToUnsignedChar();
56 mUnreadableImage->AllocateScalars();
57 for (int i=0;i<dim[0];i++)
58 for (int j=0;j<dim[1];j++)
59 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
60 for (int i=0;i<dim[0];i++)
62 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
63 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
69 //=====================================================================
71 //=====================================================================
72 ImageReader::~ImageReader()
74 std::vector<AbstractImageReader*>::iterator i;
75 for (i=mReader.begin(); i!=mReader.end(); i++)
80 if (mUnreadableImage!=0)
82 mUnreadableImage->Delete();
86 //=====================================================================
88 //=====================================================================
89 void ImageReader::Register(AbstractImageReader* r)
94 //=====================================================================
96 //=====================================================================
97 // Returns true iff the file is readable
98 bool ImageReader::CanRead( const std::string& filename )
101 std::vector<AbstractImageReader*>::iterator i;
102 for (i=mReader.begin(); i!=mReader.end(); i++)
104 ok = (*i)->CanRead(filename);
107 mLastFilename = filename;
114 //=====================================================================
116 //=====================================================================
117 // Reads the file (CanRead must be called before : no test here)
118 vtkImageData* ImageReader::ReadImage( const std::string& filename)
120 if (mLastFilename!=filename)
122 if (!CanRead(filename))
124 vtkImageData* im = vtkImageData::New();
125 im->ShallowCopy(mUnreadableImage);
129 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
132 i = vtkImageData::New();
133 i->ShallowCopy(mUnreadableImage);
137 //=====================================================================
140 //=====================================================================
141 void ImageReader::ReadAttributes(const std::string& filename,
142 std::map<std::string,std::string>& attr)
144 if (mLastFilename!=filename)
146 if (!CanRead(filename))
151 mLastReader->ReadAttributes(mLastFilename,attr);
153 //=====================================================================
156 //=====================================================================
157 /// Pushes back all kwown extensions (without dot) in the vector given
158 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
160 std::vector<AbstractImageReader*>::iterator i;
161 for (i=mReader.begin(); i!=mReader.end(); i++)
163 (*i)->PushBackExtensions(v);
166 //=====================================================================
168 } // namespace creaImageIO