00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkRawImageIO_h
00018 #define __itkRawImageIO_h
00019
00020 #include <fstream>
00021 #include "itkImageIOBase.h"
00022 #include "itkIndex.h"
00023 #include "itkImageRegion.h"
00024 #include "itkPixelTraits.h"
00025 #include "itkByteSwapper.h"
00026 #include "itkVersion.h"
00027 #include <string>
00028
00029
00030 namespace itk
00031 {
00032
00047 template <class TPixel, unsigned int VImageDimension=2>
00048 class ITK_EXPORT RawImageIO : public ImageIOBase
00049 {
00050 public:
00052 typedef RawImageIO Self;
00053 typedef ImageIOBase Superclass;
00054 typedef SmartPointer<Self> Pointer;
00055
00057 itkNewMacro(Self);
00058
00060 itkTypeMacro(RawImageIO, ImageIOBase);
00061
00064 typedef TPixel PixelType;
00065
00067 typedef typename PixelTraits<PixelType>::ValueType ComponentType;
00068
00070 typedef ByteSwapper<ComponentType> ByteSwapperType;
00071
00072
00075 void SetHeaderSize(unsigned long size);
00076 unsigned long GetHeaderSize();
00077
00081 itkSetMacro(FileDimensionality, unsigned long);
00082 itkGetMacro(FileDimensionality, unsigned long);
00083
00085 virtual const std::type_info& GetPixelType() const
00086 {return typeid(PixelType);}
00087
00091 virtual unsigned int GetComponentSize() const
00092 {return sizeof(typename PixelTraits<PixelType>::ValueType);}
00093
00099 virtual bool SupportsDimension(unsigned long dim)
00100 {return (dim == m_FileDimensionality);}
00101
00102
00103
00107 virtual bool CanReadFile(const char*)
00108 {return false;}
00109
00112 virtual void ReadImageInformation()
00113 {return;}
00114
00116 virtual void Read(void* buffer);
00117
00119 itkGetConstMacro(ImageMask,unsigned short);
00120 void SetImageMask(unsigned long val)
00121 {
00122 if (val == m_ImageMask) { return; }
00123 m_ImageMask = ((unsigned short)(val));
00124 this->Modified();
00125 }
00126
00128 virtual void ReadHeader (const std::string = std::string()) {}
00129
00130
00131
00135 virtual bool CanWriteFile(const char*);
00136
00138 virtual void WriteImageInformation(void)
00139 {return;}
00140
00141
00143 virtual void Write(const void* buffer);
00144
00145
00146 virtual bool SetPixelType(const std::type_info& )
00147 { return true; }
00148
00149 virtual void SetPixelType(const IODataType ) {}
00150 protected:
00151 RawImageIO();
00152 ~RawImageIO();
00153 void PrintSelf(std::ostream& os, Indent indent) const;
00154
00155
00156 void OpenFileForReading(std::ifstream& is);
00157 void OpenFileForWriting(std::ofstream& os);
00158
00159 private:
00160 RawImageIO(const Self&);
00161 void operator=(const Self&);
00162
00163 std::string m_InternalFileName;
00164
00165 unsigned long m_FileDimensionality;
00166 bool m_ManualHeaderSize;
00167 unsigned long m_HeaderSize;
00168 unsigned short m_ImageMask;
00169 };
00170
00171
00172
00173
00174
00175 template <class TPixel, unsigned int VImageDimension>
00176 class ITK_EXPORT RawImageIOFactory : public ObjectFactoryBase
00177 {
00178 public:
00180 typedef RawImageIOFactory<TPixel,VImageDimension> Self;
00181 typedef ObjectFactoryBase Superclass;
00182 typedef SmartPointer<Self> Pointer;
00183 typedef SmartPointer<const Self> ConstPointer;
00184
00186 const char* GetITKSourceVersion(void) const
00187 {
00188 return ITK_SOURCE_VERSION;
00189 }
00190
00191 const char* GetDescription(void) const
00192 {
00193 return "Raw ImageIO Factory, allows the loading of Raw images into insight";
00194 }
00195
00197 itkFactorylessNewMacro(Self);
00198
00200 itkTypeMacro(RawImageIOFactory, ObjectFactoryBase);
00201
00203 static void RegisterOneFactory(void)
00204 {
00205 ObjectFactoryBase::RegisterFactory( Self::New() );
00206 }
00207
00208
00209 protected:
00210 RawImageIOFactory() {};
00211 ~RawImageIOFactory() {};
00212 typedef RawImageIO<TPixel,VImageDimension> myProductType;
00213 const myProductType* m_MyProduct;
00214
00215 private:
00216 RawImageIOFactory(const Self&);
00217 void operator=(const Self&);
00218
00219 };
00220
00221 }
00222
00223 #ifndef ITK_MANUAL_INSTANTIATION
00224 #include "itkRawImageIO.txx"
00225 #endif
00226
00227 #endif