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 std::cout << "## Registered file extensions : "<<std::endl;
51 std::vector<std::string>::const_iterator i;
52 for (i=GetKnownExtensions().begin();
53 i!=GetKnownExtensions().end();
56 std::cout << "'"<<(*i)<<"'"<<std::endl;
60 mUnreadableImage = vtkImageData::New();
62 dim[0] = dim[1] = 128;
64 mUnreadableImage->SetDimensions ( dim );
65 mUnreadableImage->SetScalarTypeToUnsignedChar();
66 mUnreadableImage->AllocateScalars();
67 for (int i=0;i<dim[0];i++)
68 for (int j=0;j<dim[1];j++)
69 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
70 for (int i=0;i<dim[0];i++)
72 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
73 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
79 //=====================================================================
81 //=====================================================================
82 ImageReader::~ImageReader()
84 // std::cout << "#### ImageReader::~ImageReader()"<<std::endl;
85 std::vector<AbstractImageReader*>::iterator i;
86 for (i=mReader.begin(); i!=mReader.end(); i++)
88 // std::cout << "#### ImageReader::UnRegister("
89 // << (*i)->GetName()<<")"<<std::endl;
93 if (mUnreadableImage!=0)
95 mUnreadableImage->Delete();
99 //=====================================================================
101 //=====================================================================
102 void ImageReader::Register(AbstractImageReader* r)
104 // std::cout << "#### ImageReader::Register("<<r->GetName()<<")"<<std::endl;
105 mReader.push_back(r);
106 // r->PushBackExtensions(mKnownExtensions);
108 //=====================================================================
110 //=====================================================================
111 // Returns true iff the file is readable
112 bool ImageReader::CanRead( const std::string& filename )
113 // const std::string& exclude )
115 // std::cout << "## ImageReader::CanRead("<<filename<<")"<<std::endl;
117 std::vector<AbstractImageReader*>::iterator i;
118 for (i=mReader.begin(); i!=mReader.end(); i++)
120 // if ((*i)->GetName()==exclude) continue;
121 ok = (*i)->CanRead(filename);
124 mLastFilename = filename;
131 //=====================================================================
133 //=====================================================================
134 // Reads the file (CanRead must be called before : no test here)
135 vtkImageData* ImageReader::ReadImage( const std::string& filename)
136 // const std::string& exclude )
138 // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
139 if (mLastFilename!=filename)
141 if (!CanRead(filename)) //,exclude))
143 // std::cout << " -- Cannot read image "<<std::endl;
144 vtkImageData* im = vtkImageData::New();
145 im->ShallowCopy(mUnreadableImage);
149 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
150 // std::cout << "i="<<i<<std::endl;
153 // std::cout << "i=UNREAD"<<i<<std::endl;
154 i = vtkImageData::New();
155 i->ShallowCopy(mUnreadableImage);
157 // std::cout << "i="<<i<<std::endl;
158 std::cout<<"return: "<<i->GetScalarTypeAsString()<<", pointer="<<i<<std::endl;
161 //=====================================================================
164 //=====================================================================
165 void ImageReader::ReadAttributes(const std::string& filename,
166 std::map<std::string,std::string>& attr)
168 // std::cout << "ImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
169 // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
170 if (mLastFilename!=filename)
172 if (!CanRead(filename))
177 mLastReader->ReadAttributes(mLastFilename,attr);
179 //=====================================================================
182 //=====================================================================
183 /// Pushes back all kwown extensions (without dot) in the vector given
184 void ImageReader::PushBackExtensions(std::vector<std::string>& v)
186 std::vector<AbstractImageReader*>::iterator i;
187 for (i=mReader.begin(); i!=mReader.end(); i++)
189 (*i)->PushBackExtensions(v);
192 //=====================================================================
194 } // namespace creaImageIO