1 #include <creaImageIORFImageReader.h>
3 #include <creaImageIOSystem.h>
4 #include "boost/filesystem/path.hpp"
10 void read_header_rf_file(FILE *rf_file,int *w,int *h,int *n_frame)
12 int *header=(int*)malloc(sizeof(int)*HEADER_SIZE);
13 fread(header,sizeof(int),HEADER_SIZE,rf_file);
20 //=====================================================================
21 RFImageReader::RFImageReader()
25 //=====================================================================
27 //=====================================================================
28 RFImageReader::~RFImageReader()
31 //=====================================================================
33 //=====================================================================
36 // frames, width, height
37 int frame,width,height;
39 //=====================================================================
42 //=====================================================================
43 bool ReadHeader( FILE *rf_file, rf_header& h )
45 int *header=(int*)malloc(sizeof(int)*HEADER_SIZE);
46 fread(header,sizeof(int),HEADER_SIZE,rf_file);
53 //=====================================================================
55 //=====================================================================
56 bool RFImageReader::CanRead(const std::string& filename)
59 FILE *rf_file=fopen(filename.c_str(),"rb");
63 ok = ReadHeader(rf_file,h);
68 //=====================================================================
70 //=====================================================================
71 vtkImageData* RFImageReader::ReadImage(const std::string& filename)
73 FILE *rf_file=fopen(filename.c_str(),"rb");
74 if (!rf_file) return false;
76 if (!ReadHeader(rf_file,h))
82 long im_size = h.height * h.width * h.frame;
83 short* data = (short*)malloc(sizeof(short)*im_size);
85 long frame_size = h.height * h.width * sizeof(short);
87 for (int k=0; k<h.frame; k++) {
89 fread(&frame_number,sizeof(int),1,rf_file);
90 fread(ptr,sizeof(short),frame_size,rf_file);
96 return crea::NewVtkImageDataFromRaw( data,
100 //=====================================================================
103 //=====================================================================
104 void RFImageReader::PushBackExtensions(std::vector<std::string>& v)
108 //=====================================================================
112 //=====================================================================
113 void RFImageReader::ReadAttributes(const std::string& filename,
114 std::map<std::string,std::string>& attr)
116 // std::cout << "RFImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
117 GimmickMessage(2,"Reading attributes from '"<<filename<<std::endl);
120 FILE *rf_file=fopen(filename.c_str(),"rb");
121 if (!rf_file) return;
123 if (!ReadHeader(rf_file,h))
132 sprintf(cols,"%i",h.width);
135 sprintf(rows,"%i",h.height);
138 sprintf(planes,"%i",h.frame);
142 std::map<std::string,std::string>::iterator i;
143 if ( (i = attr.find("FullFileName")) != attr.end())
145 // boost::filesystem::path full_path(filename);
146 // std::string f = full_path.leaf();
147 i->second = filename;
149 if ( (i = attr.find("D0004_1500")) != attr.end())
151 boost::filesystem::path full_path(filename);
152 std::string f = full_path.leaf();
155 if ( (i = attr.find("D0028_0010")) != attr.end())
159 if ( (i = attr.find("D0028_0011")) != attr.end())
164 if ( (i = attr.find("D0028_0012")) != attr.end())
169 GimmickMessage(2,"Attributes map:"<<std::endl<<attr<<std::endl);
171 //=====================================================================
173 } // namespace creaImageIO