analyze_data_io.h

Go to the documentation of this file.
00001 //--------------------------------------------------
00011 //---------------------------------------------------
00012 
00013 #ifndef IMEDGINE_ANALYZE_DATA_IO_H
00014 #define IMEDGINE_ANALYZE_DATA_IO_H
00015 
00016 #include "../global/global_definitions.h"
00017 #include "dataset_definitions.h"
00018 #include "../exceptions/invalid_cast_exception.h"
00019 #include "data_io.h"
00020 
00021 #include <string>
00022 
00023 #include <itkImageFileReader.h>
00024 #include <itkImageFileWriter.h>
00025 
00026 namespace imedgine
00027 {
00028   //--------------------------------------------------
00044   //---------------------------------------------------
00045   
00046   class AnalyzeDataIO : public DataIO
00047   {
00048   public:
00049     
00050     //--------------------------------------------------
00053     
00054     AnalyzeDataIO();
00055     
00056     //--------------------------------------------------
00059     
00060     virtual ~AnalyzeDataIO();
00061     
00062     //--------------------------------------------------
00069     
00070     virtual std::pair<dataset_pointer_type, dataset_type> 
00071         loadDataset(std::string filename, dataset_key_type dataset_key);
00072     
00073     //--------------------------------------------------
00078     
00079     virtual void writeDataset(dataset_pointer_type dataset, std::string filename)
00080         throw(InvalidCastException);
00081     
00082   protected:
00083       
00084     //--------------------------------------------------
00090       
00091     template <class PixelDatasetType>
00092     pixel_dataset_pointer_type read(std::string filename, dataset_key_type dataset_key);
00093     
00094     //--------------------------------------------------
00100     
00101     template <class PixelDatasetPointerType>
00102     void write(PixelDatasetPointerType dataset, std::string filename);
00103   };
00104   
00105   //--------------------------------------------------
00108 
00109   template <class PixelDatasetType>
00110       pixel_dataset_pointer_type AnalyzeDataIO::read(
00111       std::string filename, dataset_key_type dataset_key)
00112   {
00113     typedef itk::ImageFileReader<typename PixelDatasetType::type> reader_type;
00114     typename reader_type::Pointer file_reader = reader_type::New();
00115     file_reader->SetFileName(filename.c_str());
00116     file_reader->UpdateLargestPossibleRegion();
00117     
00118     typename PixelDatasetType::type::Pointer dataset(file_reader->GetOutput());
00119     dataset->DisconnectPipeline();
00120     
00121     return(pixel_dataset_pointer_type(new PixelDatasetType(dataset_key, dataset)));
00122   }
00123   
00124   //--------------------------------------------------
00127   
00128   template <class PixelDatasetPointerType>
00129   void AnalyzeDataIO::write(
00130       PixelDatasetPointerType dataset, std::string filename)
00131   {
00132     typedef typename itk::ImageFileWriter<
00133         typename PixelDatasetPointerType::element_type::type> writer_type;
00134     
00135     typename writer_type::Pointer file_writer = writer_type::New();
00136     file_writer->SetFileName(filename.c_str());
00137     file_writer->SetInput(dataset->getDataset());
00138     file_writer->Update();
00139   }
00140 }
00141 
00142 #endif //IMEDGINE_ANALYZE_DATA_IO_H
00143 
00144 

Generated on Sun Aug 13 18:19:38 2006 for iMEDgine by  doxygen 1.4.6