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"
25 //=====================================================================
27 void IRFillFields(DicomNode* node,
28 GDCM_NAME_SPACE::File* gdcmFile)
30 const DicomNodeTypeDescription::FieldDescriptionMapType& dm
31 = node->GetTypeDescription().GetFieldDescriptionMap();
32 DicomNodeTypeDescription::FieldDescriptionMapType::const_iterator i;
35 DicomNode::FieldValueMapType& vm = node->GetFieldValueMap();
36 for (i=dm.begin(); i!=dm.end(); ++i)
38 if ( (i->second.flags==0) &&
39 (i->second.group!=0) &&
40 (i->second.element!=0) )
42 uint16_t gr = i->second.group;
43 uint16_t el = i->second.element;
45 std::string val = gdcmFile->GetEntryString(gr,el);
47 vm[i->first] = irclean(val);
56 //=====================================================================
61 //=====================================================================
62 ImageReader::ImageReader()
65 mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"),
69 // std::cout << "#### ImageReader::ImageReader()"<<std::endl;
70 if (mUnreadableImage!=0) return;
72 Register(new VtkImageReader(vtkPNGReader::New()));
73 Register(new VtkImageReader(vtkTIFFReader::New()));
74 Register(new VtkImageReader(vtkJPEGReader::New()));
75 Register(new VtkImageReader(vtkBMPReader::New()));
76 Register(new VtkImageReader(vtkSLCReader::New()));
77 Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd"));
78 // Register(new VtkImageReader(vtkGESignalReader::New()));
79 Register(new DicomImageReader);
82 std::cout << "## Registered file extensions : "<<std::endl;
83 std::vector<std::string>::const_iterator i;
84 for (i=GetKnownExtensions().begin();
85 i!=GetKnownExtensions().end();
88 std::cout << "'"<<(*i)<<"'"<<std::endl;
92 mUnreadableImage = vtkImageData::New();
94 dim[0] = dim[1] = 128;
96 mUnreadableImage->SetDimensions ( dim );
97 mUnreadableImage->SetScalarTypeToUnsignedChar();
98 mUnreadableImage->AllocateScalars();
99 for (int i=0;i<dim[0];i++)
100 for (int j=0;j<dim[1];j++)
101 mUnreadableImage->SetScalarComponentFromFloat(i,j,0,0,0);
102 for (int i=0;i<dim[0];i++)
104 mUnreadableImage->SetScalarComponentFromFloat(i,i,0,0,255);
105 mUnreadableImage->SetScalarComponentFromFloat(dim[0]-1-i,i,0,0,255);
111 //=====================================================================
113 //=====================================================================
114 ImageReader::~ImageReader()
116 // std::cout << "#### ImageReader::~ImageReader()"<<std::endl;
117 std::vector<SpecificImageReader*>::iterator i;
118 for (i=mReader.begin(); i!=mReader.end(); i++)
120 // std::cout << "#### ImageReader::UnRegister("
121 // << (*i)->GetName()<<")"<<std::endl;
125 if (mUnreadableImage!=0)
127 mUnreadableImage->Delete();
128 mUnreadableImage = 0;
131 //=====================================================================
133 //=====================================================================
134 void ImageReader::Register(SpecificImageReader* r)
136 // std::cout << "#### ImageReader::Register("<<r->GetName()<<")"<<std::endl;
137 mReader.push_back(r);
138 r->PushBackExtensions(mKnownExtensions);
140 //=====================================================================
142 //=====================================================================
143 // Returns true iff the file is readable
144 bool ImageReader::CanRead( const std::string& filename,
145 const std::string& exclude )
147 // std::cout << "## ImageReader::CanRead("<<filename<<")"<<std::endl;
149 std::vector<SpecificImageReader*>::iterator i;
150 for (i=mReader.begin(); i!=mReader.end(); i++)
152 if ((*i)->GetName()==exclude) continue;
153 ok = (*i)->CanRead(filename);
156 mLastFilename = filename;
163 //=====================================================================
165 //=====================================================================
166 // Reads the file (CanRead must be called before : no test here)
167 vtkImageData* ImageReader::ReadImage( const std::string& filename,
168 const std::string& exclude )
170 // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
171 if (mLastFilename!=filename)
173 if (!CanRead(filename,exclude))
175 // std::cout << " -- Cannot read image "<<std::endl;
176 vtkImageData* im = vtkImageData::New();
177 im->ShallowCopy(mUnreadableImage);
181 vtkImageData* i = mLastReader->ReadImage(mLastFilename);
182 // std::cout << "i="<<i<<std::endl;
185 // std::cout << "i=UNREAD"<<i<<std::endl;
186 i = vtkImageData::New();
187 i->ShallowCopy(mUnreadableImage);
189 // std::cout << "i="<<i<<std::endl;
192 //=====================================================================
195 //=====================================================================
196 void ImageReader::ReadAttributes(const std::string& filename,
197 std::map<std::string,std::string>& attr)
199 // std::cout << "ImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
200 // std::cout << "## ImageReader::Read("<<filename<<")"<<std::endl;
201 if (mLastFilename!=filename)
203 if (!CanRead(filename))
208 mLastReader->ReadAttributes(mLastFilename,attr);
210 //=====================================================================
214 } // namespace creaImageIO