00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00031
#ifndef __itkIPLCommonImageIO_h
00032
#define __itkIPLCommonImageIO_h
00033
00034
#include <fstream>
00035
#include "itkImageIOBase.h"
00036
#include "itkIOCommon.h"
00037
#include "itkGEImageHeader.h"
00038
00039
00040
namespace itk
00041 {
00046 class ITK_EXPORT IPLCommonImageIO :
public ImageIOBase
00047 {
00048
public:
00050
typedef IPLCommonImageIO
Self;
00051 typedef ImageIOBase Superclass;
00052 typedef SmartPointer<Self> Pointer;
00053 typedef unsigned char U8;
00054 typedef signed char S8;
00055 typedef unsigned short U16;
00056 typedef signed short S16;
00057 typedef unsigned int U32;
00058 typedef signed int S32;
00059 typedef unsigned long U64;
00060 typedef signed long S64;
00061 typedef float F32;
00062 typedef double F64;
00063
00065
itkNewMacro(
Self);
00066
00068
itkTypeMacro(IPLCommonImageIO,
Superclass);
00069
00070
00071
00078
virtual bool CanReadFile(
const char* FileNameToRead) ;
00079
00081
virtual void ReadImageInformation();
00082
00084
virtual const std::type_info& GetPixelType() const;
00085
00087 virtual
void Read(
void* buffer);
00088
00092 virtual
unsigned int GetComponentSize() const;
00093
00094
00095
00102 virtual
bool CanWriteFile(const
char * FileNameToWrite);
00103
00105 virtual
void WriteImageInformation();
00106
00109 virtual
void Write(const
void* buffer);
00110 enum ENUM_PLANE_SELECTION
00111 {
00112 NO_PLANE = 0,
00113 AXIAL = 1,
00114 CORONAL = 2,
00115 SAGITTAL = 3,
00116 UNKNOWN_PLANE = 5
00117 };
00118
00119
00120
struct FILESORTINFOSTRUCT {
00121 char imageFileName[itk::IOCommon::ITK_MAXPATHLEN+1];
00122 float SliceLocation;
00123 int SliceOffset;
00124 int echoNumber;
00125 void * data;
00126 };
00127
typedef struct FILESORTINFOSTRUCT FILESORTINFO;
00128 protected:
00129 IPLCommonImageIO();
00130 ~IPLCommonImageIO();
00131
void PrintSelf(std::ostream& os,
Indent indent)
const;
00132
00133
00134
00135
struct FILENAMELISTSTRUCT
00136 {
00137 FILESORTINFO Info[itk::IOCommon::MAX_FILENAMELIST_SIZE];
00138 int XDim;
00139 int YDim;
00140 int Key1;
00141
int Key2;
00142
int numImageInfoStructs;
00143
int maxImageFileNames;
00144 };
00145 typedef struct FILENAMELISTSTRUCT FILENAMELIST;
00146
void InitializeFILENAMELIST( FILENAMELIST *
const fnList );
00147 int AddElementToList(FILENAMELIST *
const fnList,
char const *
const filename,
const float sliceLocation,
const int offset,
const int XDim,
const int YDim,
const int Key1,
const int Key2 );
00148
void sortImageListAscend (FILENAMELIST *
const fnList);
00149
void sortImageListDescend (FILENAMELIST *
const fnList);
00150
int statTimeToAscii (
void *clock,
char *timeString);
00151
virtual struct GEImageHeader *ReadHeader(
const char *FileNameToRead);
00152
00153
00154
struct GEImageHeader *m_ImageHeader;
00155 ImageIOBase::ByteOrder m_system_byteOrder;
00156 FILENAMELIST m_fnlist;
00157
00158
00159
int GetStringAt(std::ifstream &f,std::streamoff
Offset,
char *buf,
00160 size_t amount,
bool throw_exception =
true);
00161
int GetIntAt(std::ifstream &f,std::streamoff
Offset,
int *ip,
00162
bool throw_exception =
true);
00163
int GetShortAt(std::ifstream &f,std::streamoff
Offset,
short *ip,
00164
bool throw_exception =
true);
00165
int GetFloatAt(std::ifstream &f,std::streamoff
Offset,
float *ip,
00166
bool throw_exception =
true);
00167
int GetDoubleAt(std::ifstream &f,std::streamoff
Offset,
double *ip,
00168
bool throw_exception =
true);
00169
00170
short hdr2Short(
char *hdr);
00171
int hdr2Int(
char *hdr);
00172
float hdr2Float(
char *hdr);
00173
double hdr2Double(
char *hdr);
00174
private:
00175 IPLCommonImageIO(
const Self&);
00176
void operator=(
const Self&);
00177 };
00178
00179 }
00180
#define RAISE_EXCEPTION() \
00181
{ ExceptionObject exception(__FILE__, __LINE__); \
00182
exception.SetDescription("File cannot be read"); \
00183 throw exception; }
00184
00185
#define IOCHECK() \
00186
if(f.fail()) \
00187
{ \
00188 if(f.is_open()) \
00189
f.close(); \
00190
RAISE_EXCEPTION(); \
00191
}
00192
00193
00194
#endif // __itkAnalyzeImageIO_h