1 #include <creaImageIOImageReader.h>
2 #include <creaImageIOTreeAttributeDescriptor.h>
3 #include <creaImageIOSystem.h>
5 #include <creaImageIOVtkImageReader.h>
6 #include <creaImageIODicomImageReader.h>
8 #include <vtkPNGReader.h>
9 #include <vtkTIFFReader.h>
10 #include <vtkJPEGReader.h>
11 #include <vtkBMPReader.h>
12 #include <vtkSLCReader.h>
13 #include <vtkMetaImageReader.h>
14 //#include <vtkGESignalReader.h>
18 #include "boost/filesystem/path.hpp"
27 //=====================================================================
28 ImageReader::ImageReader()
31 mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"),
35 // std::cout << "#### ImageReader::ImageReader()"<<std::endl;
36 if (mUnreadableImage!=0) return;
38 Register(new VtkImageReader(vtkPNGReader::New()));
39 Register(new VtkImageReader(vtkTIFFReader::New()));
40 Register(new VtkImageReader(vtkJPEGReader::New()));
41 Register(new VtkImageReader(vtkBMPReader::New()));
42 Register(new VtkImageReader(vtkSLCReader::New()));
43 Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd"));
44 // Register(new VtkImageReader(vtkGESignalReader::New()));
45 Register(new DicomImageReader);
48 std::cout << "## Registered file extensions : "<<std::endl;
49 std::vector<std::string>::const_iterator i;
50 for (i=GetKnownExtensions().begin();
51 i!=GetKnownExtensions().end();
54 std::cout << "'"<<(*i)<<"'"<<std::endl;
58 mUnreadableImage = vtkImageData::New();
60 dim[0] = dim[1] = 128;
62 mUnreadableImage->SetDimensions ( dim );
63 mUnreadableImage->SetScalarTypeToUnsignedChar();
64 mUnreadableImage->AllocateScalars();
65 for (int i=0;i<dim[0];i++)
66 for (int j=0;j<dim[1];j++)
67 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
68 for (int i=0;i<dim[0];i++)
70 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
71 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
77 //=====================================================================
79 //=====================================================================
80 ImageReader::~ImageReader()
82 // std::cout << "#### ImageReader::~ImageReader()"<<std::endl;
83 std::vector<AbstractImageReader*>::iterator i;
84 for (i=mReader.begin(); i!=mReader.end(); i++)
86 // std::cout << "#### ImageReader::UnRegister("
87 // << (*i)->GetName()<<")"<<std::endl;
91 if (mUnreadableImage!=0)
93 mUnreadableImage->Delete();
97 //=====================================================================
99 //=====================================================================
100 void ImageReader::Register(AbstractImageReader* r)
102 // std::cout << "#### ImageReader::Register("<<r->GetName()<<")"<<std::endl;
103 mReader.push_back(r);
104 // r->PushBackExtensions(mKnownExtensions);
106 //=====================================================================
108 //=====================================================================
109 // Returns true iff the file is readable
110 bool ImageReader::CanRead( const std::string& filename )
111 // const std::string& exclude )
113 // std::cout << "## ImageReader::CanRead("<<filename<<")"<<std::endl;
115 std::vector<AbstractImageReader*>::iterator i;
116 for (i=mReader.begin(); i!=mReader.end(); i++)
118 // if ((*i)->GetName()==exclude) continue;
119 ok = (*i)->CanRead(filename);
122 mLastFilename = filename;
129 //=====================================================================
131 //=====================================================================
132 // Reads the file (CanRead must be called before : no test here)
133 vtkImageData* ImageReader::ReadImage( const std::string& filename)
134 // const std::string& exclude )
136 // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
137 if (mLastFilename!=filename)
139 if (!CanRead(filename)) //,exclude))
141 // std::cout << " -- Cannot read image "<<std::endl;
142 vtkImageData* im = vtkImageData::New();
143 im->ShallowCopy(mUnreadableImage);
147 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
148 // std::cout << "i="<<i<<std::endl;
151 // std::cout << "i=UNREAD"<<i<<std::endl;
152 i = vtkImageData::New();
153 i->ShallowCopy(mUnreadableImage);
155 // std::cout << "i="<<i<<std::endl;
158 //=====================================================================
161 //=====================================================================
162 void ImageReader::ReadAttributes(const std::string& filename,
163 std::map<std::string,std::string>& attr)
165 // std::cout << "ImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
166 // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
167 if (mLastFilename!=filename)
169 if (!CanRead(filename))
174 mLastReader->ReadAttributes(mLastFilename,attr);
176 //=====================================================================
179 //=====================================================================
180 /// Pushes back all kwown extensions (without dot) in the vector given
181 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
183 std::vector<AbstractImageReader*>::iterator i;
184 for (i=mReader.begin(); i!=mReader.end(); i++)
186 (*i)->PushBackExtensions(v);
189 //=====================================================================
191 } // namespace creaImageIO