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