00001
00002
00003
00004
00005
00006
00007
00008
00009
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
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
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
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(®ular, 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