#include #include #include #include "boost/filesystem/path.hpp" namespace creaImageIO { #define HEADER_SIZE 19 void read_header_rf_file(FILE *rf_file,int *w,int *h,int *n_frame) { int *header=(int*)malloc(sizeof(int)*HEADER_SIZE); fread(header,sizeof(int),HEADER_SIZE,rf_file); *n_frame=header[1]; *w=header[2]; *h=header[3]; free(header); } //===================================================================== RFImageReader::RFImageReader() { SetName("rf"); } //===================================================================== //===================================================================== RFImageReader::~RFImageReader() { } //===================================================================== //===================================================================== struct rf_header { // frames, width, height int frame,width,height; }; //===================================================================== //===================================================================== bool ReadHeader( FILE *rf_file, rf_header& h ) { int *header=(int*)malloc(sizeof(int)*HEADER_SIZE); fread(header,sizeof(int),HEADER_SIZE,rf_file); h.frame = header[1]; h.width = header[2]; h.height = header[3]; free(header); return true; } //===================================================================== //===================================================================== bool RFImageReader::CanRead(const std::string& filename) { bool ok = false; FILE *rf_file=fopen(filename.c_str(),"rb"); if (rf_file) { rf_header h; ok = ReadHeader(rf_file,h); } fclose(rf_file); return ok; } //===================================================================== //===================================================================== vtkImageData* RFImageReader::ReadImage(const std::string& filename) { FILE *rf_file=fopen(filename.c_str(),"rb"); if (!rf_file) return false; rf_header h; if (!ReadHeader(rf_file,h)) { fclose(rf_file); return 0; } long im_size = h.height * h.width * h.frame; short* data = (short*)malloc(sizeof(short)*im_size); long frame_size = h.height * h.width * sizeof(short); short* ptr = data; for (int k=0; k& v) { v.push_back("rf"); } //===================================================================== //===================================================================== void RFImageReader::ReadAttributes(const std::string& filename, std::map& attr) { // std::cout << "RFImageReader::ReadDicomInfo '"<::iterator i; if ( (i = attr.find("FullFileName")) != attr.end()) { // boost::filesystem::path full_path(filename); // std::string f = full_path.leaf(); i->second = filename; } if ( (i = attr.find("D0004_1500")) != attr.end()) { boost::filesystem::path full_path(filename); std::string f = full_path.leaf(); i->second = f; } if ( (i = attr.find("D0028_0010")) != attr.end()) { i->second = rows; } if ( (i = attr.find("D0028_0011")) != attr.end()) { i->second = cols; } if ( (i = attr.find("D0028_0012")) != attr.end()) { i->second = planes; } GimmickMessage(2,"Attributes map:"<