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)
64 FILE *rf_file=fopen(filename.c_str(),"rb");
65 if (!rf_file) return false;
67 if (!ReadHeader(rf_file,h))
73 long im_size = h.height * h.width * h.frame;
74 short* data = (short*)malloc(sizeof(short)*im_size);
76 long frame_size = h.height * h.width * sizeof(short);
78 for (int k=0; k<h.frame; k++) {
80 fread(&frame_number,sizeof(int),1,rf_file);
81 fread(ptr,sizeof(short),frame_size,rf_file);
86 // std::cout << "NewVtkImageDataFromRaw" << std::endl;
87 vtkImageData* im = crea::NewVtkImageDataFromRaw( data,
94 // std::cout << "OK" << std::endl;
97 //=====================================================================
100 //=====================================================================
101 void RFImageReader::PushBackExtensions(std::vector<std::string>& v)
105 //=====================================================================
109 //=====================================================================
110 void RFImageReader::ReadAttributes(const std::string& filename,
111 std::map<std::string,std::string>& attr)
113 // std::cout << "RFImageReader::ReadDicomInfo '"<<filename<<"'"<<std::endl;
114 GimmickMessage(2,"Reading attributes from '"<<filename<<std::endl);
117 FILE *rf_file=fopen(filename.c_str(),"rb");
118 if (!rf_file) return;
120 if (!ReadHeader(rf_file,h))
129 sprintf(cols,"%i",h.width);
132 sprintf(rows,"%i",h.height);
135 sprintf(planes,"%i",h.frame);
139 std::map<std::string,std::string>::iterator i;
140 if ( (i = attr.find("FullFileName")) != attr.end())
142 // boost::filesystem::path full_path(filename);
143 // std::string f = full_path.leaf();
144 i->second = filename;
146 if ( (i = attr.find("D0004_1500")) != attr.end())
148 boost::filesystem::path full_path(filename);
149 std::string f = full_path.leaf();
152 if ( (i = attr.find("D0028_0010")) != attr.end())
156 if ( (i = attr.find("D0028_0011")) != attr.end())
161 if ( (i = attr.find("D0028_0012")) != attr.end())
166 GimmickMessage(2,"Attributes map:"<<std::endl<<attr<<std::endl);
168 //=====================================================================
170 } // namespace creaImageIO