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,
101 std::cout << "OK" << std::endl;
104 //=====================================================================
107 //=====================================================================
108 void RFImageReader::PushBackExtensions(std::vector<std::string>& v)
112 //=====================================================================
116 //=====================================================================
117 void RFImageReader::ReadAttributes(const std::string& filename,
118 std::map<std::string,std::string>& attr)
120 // std::cout << "RFImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
121 GimmickMessage(2,"Reading attributes from '"<<filename<<std::endl);
124 FILE *rf_file=fopen(filename.c_str(),"rb");
125 if (!rf_file) return;
127 if (!ReadHeader(rf_file,h))
136 sprintf(cols,"%i",h.width);
139 sprintf(rows,"%i",h.height);
142 sprintf(planes,"%i",h.frame);
146 std::map<std::string,std::string>::iterator i;
147 if ( (i = attr.find("FullFileName")) != attr.end())
149 // boost::filesystem::path full_path(filename);
150 // std::string f = full_path.leaf();
151 i->second = filename;
153 if ( (i = attr.find("D0004_1500")) != attr.end())
155 boost::filesystem::path full_path(filename);
156 std::string f = full_path.leaf();
159 if ( (i = attr.find("D0028_0010")) != attr.end())
163 if ( (i = attr.find("D0028_0011")) != attr.end())
168 if ( (i = attr.find("D0028_0012")) != attr.end())
173 GimmickMessage(2,"Attributes map:"<<std::endl<<attr<<std::endl);
175 //=====================================================================
177 } // namespace creaImageIO