1 #include <creaImageIORFImageReader.h>
3 #include <creaImageIOSystem.h>
4 #include "boost/filesystem/path.hpp"
11 //=====================================================================
12 RFImageReader::RFImageReader()
16 //=====================================================================
18 //=====================================================================
19 RFImageReader::~RFImageReader()
22 //=====================================================================
24 //=====================================================================
27 // frames, width, height
28 int frame,width,height;
30 //=====================================================================
33 //=====================================================================
34 bool ReadHeader( FILE *rf_file, rf_header& h )
36 int *header=(int*)malloc(sizeof(int)*HEADER_SIZE);
37 fread(header,sizeof(int),HEADER_SIZE,rf_file);
44 //=====================================================================
46 //=====================================================================
47 bool RFImageReader::CanRead(const std::string& filename)
50 FILE *rf_file=fopen(filename.c_str(),"rb");
54 ok = ReadHeader(rf_file,h);
59 //=====================================================================
61 //=====================================================================
62 vtkImageData* RFImageReader::ReadImage(const std::string& filename)
65 std::cout<<"RFImageReader reading "<<std::endl;
67 FILE *rf_file=fopen(filename.c_str(),"rb");
68 if (!rf_file) return false;
70 if (!ReadHeader(rf_file,h))
76 long im_size = h.height * h.width * h.frame;
77 short* data = (short*)malloc(sizeof(short)*im_size);
79 long frame_size = h.height * h.width;
81 for (int k=0; k<h.frame; k++) {
83 fread(&frame_number,sizeof(int),1,rf_file);
84 fread(ptr,sizeof(short),frame_size,rf_file);
89 // std::cout << "NewVtkImageDataFromRaw" << std::endl;
90 vtkImageData* im = crea::NewVtkImageDataFromRaw( data,
96 // std::cout << "OK" << std::endl;
99 //=====================================================================
102 //=====================================================================
103 void RFImageReader::PushBackExtensions(std::vector<std::string>& v)
107 //=====================================================================
111 //=====================================================================
112 void RFImageReader::ReadAttributes(const std::string& filename,
113 std::map<std::string,std::string>& attr)
115 // std::cout << "RFImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
116 GimmickMessage(2,"Reading attributes from '"<<filename<<std::endl);
119 FILE *rf_file=fopen(filename.c_str(),"rb");
120 if (!rf_file) return;
122 if (!ReadHeader(rf_file,h))
131 sprintf(cols,"%i",h.width);
134 sprintf(rows,"%i",h.height);
137 sprintf(planes,"%i",h.frame);
141 std::map<std::string,std::string>::iterator i;
142 if ( (i = attr.find("FullFileName")) != attr.end())
144 // boost::filesystem::path full_path(filename);
145 // std::string f = full_path.leaf();
146 i->second = filename;
148 if ( (i = attr.find("D0004_1500")) != attr.end())
150 boost::filesystem::path full_path(filename);
151 std::string f = full_path.leaf();
154 if ( (i = attr.find("D0028_0010")) != attr.end())
158 if ( (i = attr.find("D0028_0011")) != attr.end())
163 if ( (i = attr.find("D0028_0012")) != attr.end())
168 GimmickMessage(2,"Attributes map:"<<std::endl<<attr<<std::endl);
170 //=====================================================================
172 } // namespace creaImageIO