/vol/vipdata/irtk/image++/include/irtkANALYZE.h

00001 /*=========================================================================
00002 
00003   Library   : Image Registration Toolkit (IRTK)
00004   Module    : $Id: irtkANALYZE.h 2 2008-12-23 12:40:14Z dr $
00005   Copyright : Imperial College, Department of Computing
00006               Visual Information Processing (VIP), 2008 onwards
00007   Date      : $Date: 2008-12-23 12:40:14 +0000 (Tue, 23 Dec 2008) $
00008   Version   : $Revision: 2 $
00009   Changes   : $Author: dr $
00010 
00011 =========================================================================*/
00012 
00013 #ifndef _IRTKANALYZE_H
00014 
00015 #define _IRTKANALYZE_H
00016 
00017 #define ANALYZE_NONE                   0
00018 #define ANALYZE_UNKNOWN                0
00019 #define ANALYZE_BINARY                 1
00020 #define ANALYZE_UNSIGNED_CHAR          2
00021 #define ANALYZE_SIGNED_SHORT           4
00022 #define ANALYZE_SIGNED_INT             8
00023 #define ANALYZE_FLOAT                  16
00024 #define ANALYZE_COMPLEX                32
00025 #define ANALYZE_DOUBLE                 64
00026 #define ANALYZE_RGB                    128
00027 #define ANALYZE_ALL                    255
00028 
00029 class irtkANALYZEHeader
00030 {
00031 
00032 public:
00033 
00034   int   sizeof_hdr;
00035   char  padding1[28];
00036   int   extents;
00037   short padding2;
00038   char  regular;
00039   char  padding3;
00040   short dims[4];
00041   short padding4[11];
00042   short data_type;
00043   short bits;
00044   short padding5;
00045   float pixdims[4];
00046   float padding6[12];
00047   int   glmax;
00048   int   glmin;
00049   char  padding7[168];
00050   int   padding8[8];
00051 
00053   irtkANALYZEHeader();
00054 
00056   void Write(char *);
00057 
00059   void Read(char *);
00060 };
00061 
00062 inline irtkANALYZEHeader::irtkANALYZEHeader()
00063 {
00064   int i;
00065 
00066   // Initialize header
00067   sizeof_hdr=348;
00068   extents=16384;
00069   regular=114;
00070   data_type=4;
00071   bits=16;
00072   glmin = 0;
00073   glmax = 0;
00074 
00075   for (i = 0;i < 4;i++)
00076     dims[i] = 0;
00077   for (i = 0;i < 4;i++)
00078     pixdims[i] = 0;
00079 
00080   for (i = 0; i < 28; i++) padding1[i] = 0;
00081   padding2 = 0;
00082   padding3 = 0;
00083   for (i = 0; i < 11; i++) padding4[i] = 0;
00084   padding5 = 0;
00085   for (i = 0; i < 12; i++) padding6[i] = 0;
00086   for (i = 0; i < 168; i++) padding7[i] = 0;
00087   for (i = 0; i < 8; i++) padding8[i] = 0;
00088 }
00089 
00090 inline void irtkANALYZEHeader::Write(char *filename)
00091 {
00092   irtkCofstream to;
00093 
00094   // Write header
00095   to.Open(filename);
00096   to.WriteAsInt(sizeof_hdr, 0);
00097   to.WriteAsChar(padding1, 28, 4);
00098   to.WriteAsInt(extents, 32);
00099   to.WriteAsShort(padding2, 36);
00100   to.WriteAsChar(regular, 38);
00101   to.WriteAsChar(padding3, 39);
00102   to.WriteAsShort(dims, 4, 40);
00103   to.WriteAsShort(padding4, 11, 48);
00104   to.WriteAsShort(data_type, 70);
00105   to.WriteAsShort(bits, 72);
00106   to.WriteAsShort(padding5, 74);
00107   to.WriteAsFloat(pixdims, 4, 76);
00108   to.WriteAsFloat(padding6, 12, 92);
00109   to.WriteAsInt(glmax, 140);
00110   to.WriteAsInt(glmin, 144);
00111   to.WriteAsChar(padding7, 168, 148);
00112   to.WriteAsInt(padding8, 8, 316);
00113   to.Close();
00114 }
00115 
00116 inline void irtkANALYZEHeader::Read(char *filename)
00117 {
00118   irtkCifstream from;
00119 
00120   // Write header
00121   from.Open(filename);
00122   from.ReadAsInt(&sizeof_hdr, 1, 0);
00123   if (sizeof_hdr != 348) {
00124     from.IsSwapped(!from.IsSwapped());
00125   }
00126   from.ReadAsChar(padding1, 28, 4);
00127   from.ReadAsInt(&extents, 1, 32);
00128   from.ReadAsShort(&padding2, 1, 36);
00129   from.ReadAsChar(&regular, 1, 38);
00130   from.ReadAsChar(&padding3, 1, 39);
00131   from.ReadAsShort(dims, 4, 40);
00132   from.ReadAsShort(padding4, 11, 48);
00133   from.ReadAsShort(&data_type, 1, 70);
00134   from.ReadAsShort(&bits, 1, 72);
00135   from.ReadAsShort(&padding5, 1, 74);
00136   from.ReadAsFloat(pixdims, 4, 76);
00137   from.ReadAsFloat(padding6, 12, 92);
00138   from.ReadAsInt(&glmax, 1, 140);
00139   from.ReadAsInt(&glmin, 1, 144);
00140   from.ReadAsChar(padding7, 168, 148);
00141   from.ReadAsInt(padding8, 8, 316);
00142   from.Close();
00143 }
00144 #endif