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;
40 Register(new VtkImageReader(vtkPNGReader::New(), "PNG", ".png"));
41 Register(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg"));
42 Register(new VtkImageReader(vtkJPEGReader::New()));
43 Register(new VtkImageReader(vtkBMPReader::New()));
44 Register(new VtkImageReader(vtkSLCReader::New()));
45 Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd"));
46 // Register(new VtkImageReader(vtkGESignalReader::New()));
47 Register(new DicomImageReader);
48 Register(new UltrasonixImageReader);
51 mUnreadableImage = vtkImageData::New();
53 dim[0] = dim[1] = 128;
55 mUnreadableImage->SetDimensions ( dim );
56 mUnreadableImage->SetScalarTypeToUnsignedChar();
57 mUnreadableImage->AllocateScalars();
58 for (int i=0;i<dim[0];i++)
59 for (int j=0;j<dim[1];j++)
60 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
61 for (int i=0;i<dim[0];i++)
63 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
64 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
70 //=====================================================================
72 //=====================================================================
73 ImageReader::~ImageReader()
75 std::vector<AbstractImageReader*>::iterator i;
76 for (i=mReader.begin(); i!=mReader.end(); i++)
81 if (mUnreadableImage!=0)
83 mUnreadableImage->Delete();
87 //=====================================================================
89 //=====================================================================
90 void ImageReader::Register(AbstractImageReader* r)
95 //=====================================================================
97 //=====================================================================
98 // Returns true iff the file is readable
99 bool ImageReader::CanRead( const std::string& filename )
104 std::vector<AbstractImageReader*>::iterator i;
105 for (i=mReader.begin(); i!=mReader.end(); i++)
107 ok = (*i)->CanRead(filename);
110 mLastFilename = filename;
119 //=====================================================================
121 //=====================================================================
122 // Reads the file (CanRead must be called before : no test here)
123 vtkImageData* ImageReader::ReadImage( const std::string& filename)
125 if (mLastFilename!=filename)
127 if (!CanRead(filename))
129 vtkImageData* im = vtkImageData::New();
130 im->ShallowCopy(mUnreadableImage);
134 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
137 i = vtkImageData::New();
138 i->ShallowCopy(mUnreadableImage);
142 //=====================================================================
145 //=====================================================================
146 void ImageReader::ReadAttributes(const std::string& filename,
147 std::map<std::string,std::string>& attr)
149 if (mLastFilename!=filename)
151 if (!CanRead(filename))
156 mLastReader->ReadAttributes(mLastFilename,attr);
158 //=====================================================================
161 //=====================================================================
162 /// Pushes back all kwown extensions (without dot) in the vector given
163 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
165 std::vector<AbstractImageReader*>::iterator i;
166 for (i=mReader.begin(); i!=mReader.end(); i++)
168 (*i)->PushBackExtensions(v);
171 //=====================================================================
173 } // namespace creaImageIO