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);
95 // std::cout << "NewVtkImageDataFromRaw" << std::endl;
96 vtkImageData* im = crea::NewVtkImageDataFromRaw( data,
103 // std::cout << "OK" << std::endl;
106 //=====================================================================
109 //=====================================================================
110 void RFImageReader::PushBackExtensions(std::vector<std::string>& v)
114 //=====================================================================
118 //=====================================================================
119 void RFImageReader::ReadAttributes(const std::string& filename,
120 std::map<std::string,std::string>& attr)
122 // std::cout << "RFImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
123 GimmickMessage(2,"Reading attributes from '"<<filename<<std::endl);
126 FILE *rf_file=fopen(filename.c_str(),"rb");
127 if (!rf_file) return;
129 if (!ReadHeader(rf_file,h))
138 sprintf(cols,"%i",h.width);
141 sprintf(rows,"%i",h.height);
144 sprintf(planes,"%i",h.frame);
148 std::map<std::string,std::string>::iterator i;
149 if ( (i = attr.find("FullFileName")) != attr.end())
151 // boost::filesystem::path full_path(filename);
152 // std::string f = full_path.leaf();
153 i->second = filename;
155 if ( (i = attr.find("D0004_1500")) != attr.end())
157 boost::filesystem::path full_path(filename);
158 std::string f = full_path.leaf();
161 if ( (i = attr.find("D0028_0010")) != attr.end())
165 if ( (i = attr.find("D0028_0011")) != attr.end())
170 if ( (i = attr.find("D0028_0012")) != attr.end())
175 GimmickMessage(2,"Attributes map:"<<std::endl<<attr<<std::endl);
177 //=====================================================================
179 } // namespace creaImageIO