Woolz Image Processing Version 1.4.0
|
00001 #ifndef WLZ_EXTFFTYPE_H 00002 #define WLZ_EXTFFTYPE_H 00003 #if defined(__GNUC__) 00004 #ident "University of Edinburgh $Id: 1bfceeaf2024faaa34d4978e6c5b563d83d196be $" 00005 #else 00006 static char _WlzExtFFType_h[] = "University of Edinburgh $Id: 1bfceeaf2024faaa34d4978e6c5b563d83d196be $"; 00007 #endif 00008 /*! 00009 * \file libWlzExtFF/WlzExtFFType.h 00010 * \author Bill Hill 00011 * \date March 1999 00012 * \version $Id: 1bfceeaf2024faaa34d4978e6c5b563d83d196be $ 00013 * \par 00014 * Address: 00015 * MRC Human Genetics Unit, 00016 * MRC Institute of Genetics and Molecular Medicine, 00017 * University of Edinburgh, 00018 * Western General Hospital, 00019 * Edinburgh, EH4 2XU, UK. 00020 * \par 00021 * Copyright (C), [2012], 00022 * The University Court of the University of Edinburgh, 00023 * Old College, Edinburgh, UK. 00024 * 00025 * This program is free software; you can redistribute it and/or 00026 * modify it under the terms of the GNU General Public License 00027 * as published by the Free Software Foundation; either version 2 00028 * of the License, or (at your option) any later version. 00029 * 00030 * This program is distributed in the hope that it will be 00031 * useful but WITHOUT ANY WARRANTY; without even the implied 00032 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00033 * PURPOSE. See the GNU General Public License for more 00034 * details. 00035 * 00036 * You should have received a copy of the GNU General Public 00037 * License along with this program; if not, write to the Free 00038 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00039 * Boston, MA 02110-1301, USA. 00040 * \brief Header file with data types for external data file format 00041 * support for the MRC Human Genetics Unit Woolz library. 00042 * \ingroup WlzExtFF 00043 */ 00044 00045 #ifndef WLZ_EXT_BIND 00046 #ifdef __cplusplus 00047 extern "C" { 00048 #endif /* __cplusplus */ 00049 #endif /* WLZ_EXT_BIND */ 00050 00051 /* 00052 * Can be used to initialise any WlzExtFF enumaerated type to an invalid 00053 * value. 00054 */ 00055 #define WLZEFF_INVALID -1 00056 00057 /*! 00058 * \enum _WlzEffFormat 00059 * \ingroup WlzExtFF 00060 * \brief enumeration of the file formats supported. 00061 * Typedef: ::WlzEffFormat 00062 */ 00063 typedef enum _WlzEffFormat 00064 { 00065 WLZEFF_FORMAT_NONE = 0, /*!< None, used to indicating no match (equal 00066 to zero). */ 00067 WLZEFF_FORMAT_BMP, /*!< Microscoft bitmap. */ 00068 WLZEFF_FORMAT_DEN, /*!< Stanford density. */ 00069 WLZEFF_FORMAT_ICS, /*!< International cytometry standard. */ 00070 WLZEFF_FORMAT_PNM, /*!< Portable any map. */ 00071 WLZEFF_FORMAT_PIC, /*!< Biorad confocal pic format. */ 00072 WLZEFF_FORMAT_SLC, /*!< SLC volume files. */ 00073 WLZEFF_FORMAT_VFF, /*!< Sunvision volumes. */ 00074 WLZEFF_FORMAT_VTK, /*!< Visualization Toolkit. */ 00075 WLZEFF_FORMAT_WLZ, /*!< Woolz. */ 00076 WLZEFF_FORMAT_IPL, /*!< IP Lab. */ 00077 WLZEFF_FORMAT_TIFF, /*!< Tiff. */ 00078 WLZEFF_FORMAT_RAW, /*!< Raw data. */ 00079 WLZEFF_FORMAT_AM, /*!< Amira. */ 00080 WLZEFF_FORMAT_JPEG, /*!< Jpeg. */ 00081 WLZEFF_FORMAT_ANL, /*!< Analyze 7.5. */ 00082 WLZEFF_FORMAT_GIF, /*!< Graphics Interchange Format. */ 00083 WLZEFF_FORMAT_MESH, /*!< Pascal Frey's tetrahedral mesh format. */ 00084 WLZEFF_FORMAT_NODEELE, /*!< Jonathan Shewchuk's mesh format. */ 00085 WLZEFF_FORMAT_VMESH, /*!< GRUMMP tetrahedral mesh format. */ 00086 WLZEFF_FORMAT_PLY2, /*!< Riken PLY2 mesh format. */ 00087 WLZEFF_FORMAT_OBJ, /*!< Wavefront geometry format. */ 00088 WLZEFF_FORMAT_TXT, /*!< Simple ASCII text listing, csv format. */ 00089 WLZEFF_FORMAT_NIFTI, /*!< Neuroimaging Informatics Technology 00090 Initiative format based on Analyze 7.5. */ 00091 WLZEFF_FORMAT_SMESH, /*!< GRUMMP surface mesh format. */ 00092 WLZEFF_FORMAT_EMT, /*!< Netgen neutral mesh format. */ 00093 WLZEFF_FORMAT_STL, /*!< Stereolithography file format. */ 00094 WLZEFF_FORMAT_PVL, /*!< Drishti PVL dot NC format. */ 00095 WLZEFF_FORMAT_COUNT /*!< Keep last: Number of formats (including 00096 WLZEFF_FORMAT_NONE). */ 00097 } WlzEffFormat; 00098 00099 #ifndef WLZ_EXT_BIND 00100 00101 #define WLZEFF_BMP_MAGIC_0 ('B') 00102 #define WLZEFF_BMP_MAGIC_1 ('M') 00103 00104 #define WLZEFF_BMP_WIN_NEW (40) 00105 00106 #define WLZEFF_BMP_CMP_RGB (0) 00107 #define WLZEFF_BMP_CMP_RLE8 (1) 00108 #define WLZEFF_BMP_CMP_ESC (0) 00109 #define WLZEFF_BMP_CMP_EOL (0) 00110 #define WLZEFF_BMP_CMP_EOB (1) 00111 #define WLZEFF_BMP_CMP_DELTA (2) 00112 00113 typedef unsigned char WLZEFF_BMP_BYTE; 00114 00115 typedef short WLZEFF_BMP_WORD; 00116 00117 typedef unsigned short WLZEFF_BMP_UINT; 00118 00119 typedef int WLZEFF_BMP_DWORD; 00120 00121 typedef int WLZEFF_BMP_LONG; 00122 00123 typedef struct _WlzEffBmpFileHead 00124 { 00125 WLZEFF_BMP_UINT bfType; 00126 WLZEFF_BMP_DWORD bfSize; 00127 WLZEFF_BMP_UINT bfReserved1; 00128 WLZEFF_BMP_UINT bfReserved2; 00129 WLZEFF_BMP_DWORD bfOffBits; 00130 } WlzEffBmpFileHead; 00131 00132 typedef struct _WlzEffBmpInfoHead 00133 { 00134 WLZEFF_BMP_DWORD biSize; 00135 WLZEFF_BMP_LONG biWidth; 00136 WLZEFF_BMP_LONG biHeight; 00137 WLZEFF_BMP_WORD biPlanes; 00138 WLZEFF_BMP_WORD biBitCount; 00139 WLZEFF_BMP_DWORD biCompression; 00140 WLZEFF_BMP_DWORD biSizeImage; 00141 WLZEFF_BMP_LONG biXPelsPerMeter; 00142 WLZEFF_BMP_LONG biYPelsPerMeter; 00143 WLZEFF_BMP_DWORD biClrUsed; 00144 WLZEFF_BMP_DWORD biClrImportant; 00145 } WlzEffBmpInfoHead; 00146 00147 typedef struct _WlzEffBmpRGBQuad 00148 { 00149 WLZEFF_BMP_BYTE rgbBlue; 00150 WLZEFF_BMP_BYTE rgbGreen; 00151 WLZEFF_BMP_BYTE rgbRed; 00152 WLZEFF_BMP_BYTE rgbReserved; 00153 } WlzEffBmpRGBQuad; 00154 00155 00156 #define WLZEFF_DEN_VERSION (1) 00157 00158 typedef struct _WlzEffDenHeader 00159 { 00160 short version; 00161 short orgMin[3]; /* Dimensions of original data file */ 00162 short orgMax[3]; 00163 short orgLen[3]; 00164 short extrMin[3]; /* Extracted portion of orig file */ 00165 short extrMax[3]; 00166 short extrLen[3]; 00167 short mapMin[3]; /* Dimensions of this map */ 00168 short mapMax[3]; 00169 short mapLen[3]; 00170 short mapWarps; /* Number of warps since extraction */ 00171 unsigned int mapLength; /* Total number of densities in map */ 00172 } WlzEffDenHeader; 00173 00174 #define WLZEFF_ICS_REC_LEN_MAX (256) 00175 #define WLZEFF_ICS_VERSION_MAJOR (1) 00176 #define WLZEFF_ICS_VERSION_MINOR (0) 00177 #define WLZEFF_ICS_PARAMETERS_MAX (8) 00178 00179 typedef enum _WlzEffIcsToken 00180 { 00181 WLZEFF_ICS_TKN_NONE = (0), 00182 WLZEFF_ICS_TKN_BITS, 00183 WLZEFF_ICS_TKN_COORDS, 00184 WLZEFF_ICS_TKN_FILENAME, 00185 WLZEFF_ICS_TKN_FLOAT, 00186 WLZEFF_ICS_TKN_FORMAT, 00187 WLZEFF_ICS_TKN_G3D, 00188 WLZEFF_ICS_TKN_INT, 00189 WLZEFF_ICS_TKN_LAYOUT, 00190 WLZEFF_ICS_TKN_L3D, 00191 WLZEFF_ICS_TKN_ORDER, 00192 WLZEFF_ICS_TKN_PARAMETERS, 00193 WLZEFF_ICS_TKN_REPRESENTATION, 00194 WLZEFF_ICS_TKN_SCIL, 00195 WLZEFF_ICS_TKN_SIGBITS, 00196 WLZEFF_ICS_TKN_SIGN, 00197 WLZEFF_ICS_TKN_SIGNED, 00198 WLZEFF_ICS_TKN_SIZES, 00199 WLZEFF_ICS_TKN_UNSIGNED, 00200 WLZEFF_ICS_TKN_VERSION, 00201 WLZEFF_ICS_TKN_VIDEO, 00202 WLZEFF_ICS_TKN_X, 00203 WLZEFF_ICS_TKN_Y, 00204 WLZEFF_ICS_TKN_Z 00205 } WlzEffIcsToken; 00206 00207 typedef struct _WlzEffIcsHeader 00208 { 00209 int versionMajor; 00210 int versionMinor; 00211 int parameters; 00212 int sizes[WLZEFF_ICS_PARAMETERS_MAX]; 00213 int sigBits; 00214 WlzEffIcsToken coords; 00215 WlzEffIcsToken order[WLZEFF_ICS_PARAMETERS_MAX]; 00216 WlzEffIcsToken format; 00217 WlzEffIcsToken sign; 00218 WlzEffIcsToken scil; 00219 } WlzEffIcsHeader; 00220 00221 #define WLZEFF_PIC_MAGIC (12345) /* BioRad .pic magic number */ 00222 #define WLZEFF_PIC_HEADBYTES (76) 00223 00224 #define WLZEFF_PIC_OFF_NX (0) 00225 #define WLZEFF_PIC_OFF_NY (2) 00226 #define WLZEFF_PIC_OFF_NPIC (4) 00227 #define WLZEFF_PIC_OFF_BLACKVAL (6) 00228 #define WLZEFF_PIC_OFF_WHITEVAL (8) 00229 #define WLZEFF_PIC_OFF_BYTEPIX (14) 00230 #define WLZEFF_PIC_OFF_MERGED (50) 00231 #define WLZEFF_PIC_OFF_RGB (52) 00232 #define WLZEFF_PIC_OFF_MAGIC (54) 00233 #define WLZEFF_PIC_OFF_BLACKVALMERGE (56) 00234 #define WLZEFF_PIC_OFF_WHITEVALMERGE (58) 00235 #define WLZEFF_PIC_OFF_RGBMERGED (60) 00236 #define WLZEFF_PIC_OFF_LENSPOWER (64) 00237 #define WLZEFF_PIC_OFF_MAGFACTOR (66) 00238 00239 #define WLZEFF_PIC_HEAD_WORD_SET(H,O,V) \ 00240 { \ 00241 *((unsigned char *)H + O) = (unsigned char )(V & 0xff); \ 00242 *((unsigned char *)H + O + 1) = (unsigned char )((V >> 8) & 0xff); \ 00243 } 00244 00245 #define WLZEFF_PIC_HEAD_WORD_GET(V,O,H) \ 00246 { \ 00247 V = *((unsigned char *)H + O + 1); \ 00248 V <<= 8; \ 00249 V |= *((unsigned char *)H + O); \ 00250 } 00251 00252 typedef struct _WlzEffPicHeader 00253 { 00254 short nX; 00255 short nY; 00256 short nPic; 00257 short blackVal; 00258 short whiteVal; 00259 short nBytes; /* 1 for 8 bit pixels, 0 for 16 bit pixels */ 00260 short merged; 00261 short colSelect; 00262 short magic; 00263 short blackValMerged; 00264 short whiteValMerged; 00265 short colSelectMerged; 00266 short lens; 00267 float magFactor; 00268 } WlzEffPicHeader; 00269 00270 #define WLZEFF_PGM_MAGIC "P5" 00271 00272 typedef enum _WlzEffPnmType 00273 { 00274 WLZEFF_PNM_TYPE_NONE = (0), 00275 WLZEFF_PNM_TYPE_PBM_ASC, 00276 WLZEFF_PNM_TYPE_PBM_BIN, 00277 WLZEFF_PNM_TYPE_PGM_ASC, 00278 WLZEFF_PNM_TYPE_PGM_BIN, 00279 WLZEFF_PNM_TYPE_PPM_ASC, 00280 WLZEFF_PNM_TYPE_PPM_BIN 00281 } WlzEffPnmType; 00282 00283 typedef struct _WlzEffStackCtrHeader 00284 { 00285 WlzIVertex3 volOrigin; 00286 WlzIVertex3 volSize; 00287 WlzFVertex3 voxSize; 00288 } WlzEffStackCtrHeader; 00289 00290 #define WLZEFF_STACK_NAMEDIGITS (8) 00291 00292 #define WLZEFF_STACK_CTR_IDENT "ident" 00293 #define WLZEFF_STACK_CTR_IDENTSTR "WLZSTACKCTR" 00294 #define WLZEFF_STACK_CTR_IDENTVERSION "1.0" 00295 #define WLZEFF_STACK_CTR_VOLORIGIN "volume origin" 00296 #define WLZEFF_STACK_CTR_VOLSIZE "volume size" 00297 #define WLZEFF_STACK_CTR_VOXSIZE "voxel size" 00298 #define WLZEFF_STACK_CTR_FILES "files" 00299 #define WLZEFF_STACK_CTR_COMMENT "#" 00300 #define WLZEFF_STACK_CTR_FIELDSEP ":" 00301 #define WLZEFF_STACK_CTR_RECORDMAX (1024) 00302 00303 #define WLZEFF_SLC_MAGIC (11111) 00304 00305 typedef enum _WlzEffSlcDataUnits 00306 { 00307 WLZEFF_SLC_DATAUNITS_METER, 00308 WLZEFF_SLC_DATAUNITS_MILLIMETER, 00309 WLZEFF_SLC_DATAUNITS_MICROMETER, 00310 WLZEFF_SLC_DATAUNITS_FOOT 00311 } WlzEffSlcDataUnits; 00312 00313 typedef enum _WlzEffSlcDataSource 00314 { 00315 WLZEFF_SLC_DATASRC_BIORAD, 00316 WLZEFF_SLC_DATASRC_MRI, 00317 WLZEFF_SLC_DATASRC_CT, 00318 WLZEFF_SLC_DATASRC_SIM, 00319 WLZEFF_SLC_DATASRC_BINVOX, 00320 WLZEFF_SLC_DATASRC_FUZVOX, 00321 WLZEFF_SLC_DATASRC_OTHER 00322 } WlzEffSlcDataSource; 00323 00324 typedef enum _WlzEffSlcDataMod 00325 { 00326 WLZEFF_SLC_DATAMOD_ORIGINAL, 00327 WLZEFF_SLC_DATAMOD_RESAMPLED, 00328 WLZEFF_SLC_DATAMOD_FILTERED, 00329 WLZEFF_SLC_DATAMOD_RESANDFILT, 00330 WLZEFF_SLC_DATAMOD_OTHER 00331 } WlzEffSlcDataMod; 00332 00333 typedef struct _WlzEffSlcHeader 00334 { 00335 int magic; 00336 WlzIVertex3 size; 00337 int bits; 00338 WlzFVertex3 spacing; 00339 int units; 00340 int source; 00341 int modification; 00342 int compression; 00343 WlzIVertex2 iconSize; 00344 unsigned char *icon; /* Three components R, G, B each of iconSize */ 00345 } WlzEffSlcHeader; 00346 00347 #define WLZEFF_VFF_REC_LEN_MAX (256) 00348 00349 typedef enum _WlzEffVffRecord 00350 { 00351 WLZEFF_VFF_REC_NONE = (0), 00352 WLZEFF_VFF_REC_NCAA, 00353 WLZEFF_VFF_REC_TYPE, 00354 WLZEFF_VFF_REC_FORMAT, 00355 WLZEFF_VFF_REC_RANK, 00356 WLZEFF_VFF_REC_BANDS, 00357 WLZEFF_VFF_REC_BITS, 00358 WLZEFF_VFF_REC_RAWSIZE, 00359 WLZEFF_VFF_REC_SIZE, 00360 WLZEFF_VFF_REC_ORIGIN, 00361 WLZEFF_VFF_REC_EXTENT, 00362 WLZEFF_VFF_REC_ASPECT 00363 } WlzEffVffRecord; 00364 00365 typedef enum _WlzEffVffFormat 00366 { 00367 WLZEFF_VFF_FORMAT_NONE = (0), 00368 WLZEFF_VFF_FORMAT_BASE, 00369 WLZEFF_VFF_FORMAT_SLICE 00370 } WlzEffVffFormat; 00371 00372 typedef enum _WlzEffVffType 00373 { 00374 WLZEFF_VFF_TYPE_NONE = (0), 00375 WLZEFF_VFF_TYPE_CONNECTIVITY, 00376 WLZEFF_VFF_TYPE_INCLUDE, 00377 WLZEFF_VFF_TYPE_NURBPATCH, 00378 WLZEFF_VFF_TYPE_RASTER, 00379 WLZEFF_VFF_TYPE_VERTICIES 00380 } WlzEffVffType; 00381 00382 typedef struct _WlzEffVffHeader 00383 { 00384 int ncaa; 00385 WlzEffVffType type; 00386 WlzEffVffFormat format; 00387 int rank; 00388 int bands; 00389 int bits; 00390 int rawsize; 00391 WlzIVertex3 size; 00392 WlzDVertex3 origin; 00393 WlzDVertex3 extent; 00394 WlzDVertex3 aspect; 00395 } WlzEffVffHeader; 00396 00397 #define WLZEFF_VTK_VERSION_MAJOR (1) 00398 #define WLZEFF_VTK_VERSION_MINOR (0) 00399 00400 typedef enum _WlzEffVtkDataType 00401 { 00402 WLZEFF_VTK_DATATYPE_ASCII, 00403 WLZEFF_VTK_DATATYPE_BINARY 00404 } WlzEffVtkDataType; 00405 00406 typedef enum _WlzEffVtkType 00407 { 00408 WLZEFF_VTK_TYPE_STRUCTURED_POINTS, 00409 WLZEFF_VTK_TYPE_STRUCTURED_GRID, 00410 WLZEFF_VTK_TYPE_UNSTRUCTURED_GRID, 00411 WLZEFF_VTK_TYPE_POLYDATA, 00412 WLZEFF_VTK_TYPE_RECTILNEAR_GRID 00413 } WlzEffVtkType; 00414 00415 typedef enum _WlzEffVtkPolyDataType 00416 { 00417 WLZEFF_VTK_POLYDATATYPE_POINTS, 00418 WLZEFF_VTK_POLYDATATYPE_VERTICIES, 00419 WLZEFF_VTK_POLYDATATYPE_LINES, 00420 WLZEFF_VTK_POLYDATATYPE_POLYGONS, 00421 WLZEFF_VTK_POLYDATATYPE_TRIANGLE_STRIPS 00422 } WlzEffVtkPolyDataType; 00423 00424 typedef enum _WlzEffVtkUnstructuredGridType 00425 { 00426 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_CELLS, 00427 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_CELL_TYPES, 00428 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_LOOKUP_TABLE, 00429 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_POINT_DATA, 00430 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_POINTS, 00431 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_SCALARS, 00432 WLZEFF_VTK_UNSTRUCTUREDGRIDTYPE_VECTORS 00433 } WlzEffVtkUnstructuredGridType; 00434 00435 typedef struct _WlzEffVtkHeader 00436 { 00437 int versionMajor; 00438 int versionMinor; 00439 char title[256]; 00440 WlzEffVtkDataType dataType; 00441 WlzEffVtkType type; 00442 } WlzEffVtkHeader; 00443 00444 /* IPLab format */ 00445 00446 typedef enum _WlzEffIPLType 00447 { 00448 WLZEFF_IPL_TYPE_UBYTE = 0, 00449 WLZEFF_IPL_TYPE_SHORT = 1, 00450 WLZEFF_IPL_TYPE_INT = 2, 00451 WLZEFF_IPL_TYPE_FLOAT = 3, 00452 WLZEFF_IPL_TYPE_COL_16 = 4, 00453 WLZEFF_IPL_TYPE_COL_24 = 5, 00454 WLZEFF_IPL_TYPE_U_16 = 6, 00455 WLZEFF_IPL_TYPE_LAST 00456 } WlzEffIPLType; 00457 00458 typedef void * WlzIPLCSpecArray; 00459 00460 typedef struct _WlzEffIPLHeader 00461 { 00462 char version[5]; 00463 unsigned char format; 00464 WlzEffIPLType dType; 00465 int nWidth; 00466 int nHeight; 00467 int nFrames; 00468 char fileClutID; 00469 int overlayInFile; 00470 char viewMode; 00471 double delta; 00472 char units[11]; 00473 char normType; 00474 char normSource; 00475 int numRegNarks; 00476 double normMin; 00477 double normMax; 00478 WlzIPLCSpecArray colorTable; 00479 }WlzEffIPLHeader; 00480 00481 /*! 00482 * \enum _WlzEffAmToken 00483 * \ingroup WlzExtFF 00484 * \brief Tokens for parsing the headers of Amira lattice files. 00485 * Typedef: ::WlzEffAmToken 00486 */ 00487 typedef enum _WlzEffAmToken 00488 { 00489 WLZEFF_AM_TOKEN_NONE = (0), 00490 WLZEFF_AM_TOKEN_BOUNDINGBOX, 00491 WLZEFF_AM_TOKEN_CLOSE, 00492 WLZEFF_AM_TOKEN_COLOR, 00493 WLZEFF_AM_TOKEN_COLORMAP, 00494 WLZEFF_AM_TOKEN_CONTENT, 00495 WLZEFF_AM_TOKEN_COORDTYPE, 00496 WLZEFF_AM_TOKEN_DEFINE, 00497 WLZEFF_AM_TOKEN_EXPRESSION, 00498 WLZEFF_AM_TOKEN_HASH, 00499 WLZEFF_AM_TOKEN_ID, 00500 WLZEFF_AM_TOKEN_IMAGEDATA, 00501 WLZEFF_AM_TOKEN_LATTICE, 00502 WLZEFF_AM_TOKEN_MATERIALS, 00503 WLZEFF_AM_TOKEN_NAME, 00504 WLZEFF_AM_TOKEN_OPEN, 00505 WLZEFF_AM_TOKEN_PARAMETERS, 00506 WLZEFF_AM_TOKEN_SEEDS, 00507 WLZEFF_AM_TOKEN_LIMITS, 00508 WLZEFF_AM_TOKEN_TIFF, 00509 WLZEFF_AM_TOKEN_TRANSFORM 00510 } WlzEffAmToken; 00511 00512 /*! 00513 * \enum _WlzEffAmDim 00514 * \ingroup WlzExtFF 00515 * \brief Dimension of the data. 00516 * Typedef: ::WlzEffAmDim 00517 */ 00518 typedef enum _WlzEffAmDim 00519 { 00520 WLZEFF_AM_DIM_NONE = (0), /*!< Dimension unknown. */ 00521 WLZEFF_AM_DIM_2 = (2), /*!< 2D. */ 00522 WLZEFF_AM_DIM_3 = (3) /*!< 3D. */ 00523 } WlzEffAmDim; 00524 00525 /*! 00526 * \enum _WlzEffAmEndian 00527 * \ingroup WlzExtFF 00528 * \brief Big or little endian binary data. The values endian enum 00529 * must be kept distinct from the dimension enum values 00530 * (apart from none). 00531 * Typedef: ::WlzEffAmFormat 00532 */ 00533 typedef enum _WlzEffAmEndian 00534 { 00535 WLZEFF_AM_ENDIAN_NONE = (0), /*!< Unknown endianness. */ 00536 WLZEFF_AM_ENDIAN_BIG = (10), /*!< Big endian. */ 00537 WLZEFF_AM_ENDIAN_LITTLE = (11) /*!< Little endian. */ 00538 } WlzEffAmEndian; 00539 00540 /*! 00541 * \enum _WlzEffAmFormat 00542 * \ingroup WlzExtFF 00543 * \brief ASCII or binary data. 00544 * Typedef: ::WlzEffAmFormat 00545 */ 00546 typedef enum _WlzEffAmFormat 00547 { 00548 WLZEFF_AM_FMT_NONE = (0), /*!< Unknown data format. */ 00549 WLZEFF_AM_FMT_BINARY = (1), /*!< Header ascii, Binary data. */ 00550 WLZEFF_AM_FMT_ASCII = (2) /*!< Ascii header and data. */ 00551 } WlzEffAmFormat; 00552 00553 /*! 00554 * \enum _WlzEffAmDatType 00555 * \ingroup WlzExtFF 00556 * \brief Type of data: byte, ... 00557 * Typedef: ::WlzEffAmDatType 00558 */ 00559 typedef enum _WlzEffAmDatType 00560 { 00561 WLZEFF_AM_DATTYPE_NONE = (0), /*!< Unknown data type. */ 00562 WLZEFF_AM_DATTYPE_BYTE = (1), /*!< Byte (8 bit) data. */ 00563 WLZEFF_AM_DATTYPE_SHORT = (2) /*!< Short (16 bit) data. */ 00564 } WlzEffAmDatType; 00565 00566 /*! 00567 * \enum _WlzEffAmCoordType 00568 * \ingroup WlzExtFF 00569 * \brief Type of coordinate system. 00570 * Typedef: ::WlzEffAmCoordType 00571 */ 00572 typedef enum _WlzEffAmCoordType 00573 { 00574 WLZEFF_AM_COORDTYPE_NONE = (0), /*!< Unknown coordinate type. */ 00575 WLZEFF_AM_COORDTYPE_UNITFORM = (1) /*!< Uniform coordinates. */ 00576 } WlzEffAmCoordType; 00577 00578 /*! 00579 * \enum _WlzEffAmLatComp 00580 * \ingroup WlzExtFF 00581 * \brief Type of compression used. 00582 * Typedef: ::WlzEffAmLatComp 00583 */ 00584 typedef enum _WlzEffAmLatComp 00585 { 00586 WLZEFF_AM_LATCOMP_NONE = (0), /*!< No compression. */ 00587 WLZEFF_AM_LATCOMP_HXBYTERLE = (1) /*!< Run length encoded bytes. */ 00588 } WlzEffAmLatComp; 00589 00590 /*! 00591 * \enum _WlzEffAmLatType 00592 * \ingroup WlzExtFF 00593 * \brief Type of lattice: uniform, ... 00594 * Typedef: ::WlzEffAmLatType 00595 */ 00596 typedef enum _WlzEffAmLatType 00597 { 00598 WLZEFF_AM_LATTYPE_NONE = (0), /*!< Unknown lattice type. */ 00599 WLZEFF_AM_LATTYPE_DATA = (1), /*!< Voxel lattice data. */ 00600 WLZEFF_AM_LATTYPE_LABELS = (2) /*!< Domain lattice data. */ 00601 } WlzEffAmLatType; 00602 00603 /*! 00604 * \struct _WlzEffAmMaterial 00605 * \ingroup WlzExtFF 00606 * \brief Item in an Amira material list. 00607 * Typedef: ::WlzEffAmMaterial 00608 */ 00609 typedef struct _WlzEffAmMaterial 00610 { 00611 int id; /*!< Index in lattice labels. */ 00612 double color[3]; /*!< RGB colour components. */ 00613 char *name; /*!< Material name. Should be free'd 00614 using AlcFree(). */ 00615 struct _WlzEffAmMaterial *next; /*!< Next material in list. */ 00616 struct _WlzEffAmMaterial *prev; /*!< Previous material in list */ 00617 } WlzEffAmMaterial; 00618 00619 /*! 00620 * \struct _WlzEffAmHead 00621 * \ingroup WlzExtFF 00622 * \brief Head of a list of Amira materials. 00623 * Typedef: ::WlzEffAmHead 00624 */ 00625 typedef struct _WlzEffAmHead 00626 { 00627 int versionMajor; 00628 int versionMinor; 00629 WlzEffAmDim dim; /*!< Dimension of the data. */ 00630 WlzEffAmFormat fmt; /*!< Data format. */ 00631 WlzEffAmEndian endian; /*!< Whether the binary data in a file 00632 is big or little endian? */ 00633 WlzEffAmLatType latType; /*!< Lattice type. */ 00634 WlzEffAmDatType latDatType; /*!< Lattice data type. */ 00635 WlzEffAmCoordType coordType; /*!< Coordinate type. */ 00636 WlzDBox3 bBox; /*!< Real world coordinates of the 00637 bounding box. */ 00638 WlzIVertex3 latSize; /*!< Lattice size. */ 00639 int latBytes; /*!< Number of bytes to read. */ 00640 int latLabel; /*!< Label for lattice. */ 00641 WlzEffAmLatComp latComp; /*!< Lattice compression. */ 00642 int matCount; /*!< Number of materials. */ 00643 WlzEffAmMaterial *materials; /*!< Linked list of materials, with 00644 the first item in the list having 00645 a NULL 'prev' entry and the last 00646 having a NULL 'next' entry. */ 00647 char *imageData; /*!< Associated image file. */ 00648 } WlzEffAmHead; 00649 00650 /*! 00651 * \struct _WlzEffBibWarpInputThresholdParamsStruct 00652 * \brief Bibfile threshold parameters record. 00653 * Typedef: ::WlzEffBibWarpInputThresholdParamsStruct 00654 */ 00655 typedef struct _WlzEffBibWarpInputThresholdParamsStruct 00656 { 00657 WlzRGBAThresholdType thresholdType; /*!< Threshold type - single, multi etc. */ 00658 WlzRGBAColorSpace threshRGBSpace; /*!< Colour space */ 00659 WlzRGBAColorChannel threshColorChannel; /*!< Colour channel */ 00660 int threshRangeLow; /*!< Single channel low threshold value */ 00661 int threshRangeHigh; /*!< Single channel high threshold value */ 00662 int threshRangeRGBLow[3]; /*!< Multi channel low threshold value */ 00663 int threshRangeRGBHigh[3]; /*!< Multi channel high threshold value */ 00664 WlzUInt threshRGBCombination; /*!< Colour combination logic mask */ 00665 WlzPixelV lowRGBPoint; /*!< Low-point for slice/box/ball threshold */ 00666 WlzPixelV highRGBPoint; /*!< High-point for slice/box/ball threshold */ 00667 double colorEllipseEcc; /*!< Ball eccentricity */ 00668 int globalThreshFlg; /*!< Global thresholding flag */ 00669 WlzIVertex2 globalThreshVtx; /*!< Global threshold vertex */ 00670 int incrThreshFlg; /*!< Incremental threshold flag */ 00671 int pickThreshFlg; /*!< Pick mode (endpoint values) flag */ 00672 int distanceThreshFlg; /*!< Distance mode flag */ 00673 00674 } WlzEffBibWarpInputThresholdParamsStruct; 00675 00676 /* Analyze 7.5 file format types. */ 00677 00678 /*! 00679 * \enum _WlzEffAnlDataType 00680 * \ingroup WlzExtFF 00681 * \brief Valid Analyze data type values. 00682 * Typedef: ::WlzEffAnlDataType 00683 */ 00684 typedef enum _WlzEffAnlDataType 00685 { 00686 WLZEFF_ANL_DT_NONE = 0, 00687 WLZEFF_ANL_DT_UNKOWN = 0, 00688 WLZEFF_ANL_DT_BINARY = 1, 00689 WLZEFF_ANL_DT_UNSIGNED_CHAR = 2, 00690 WLZEFF_ANL_DT_SIGNED_SHORT = 4, 00691 WLZEFF_ANL_DT_SIGNED_INT = 8, 00692 WLZEFF_ANL_DT_FLOAT = 16, 00693 WLZEFF_ANL_DT_COMPLEX = 32, 00694 WLZEFF_ANL_DT_DOUBLE = 64, 00695 WLZEFF_ANL_DT_RGB = 128, 00696 WLZEFF_ANL_DT_ALL = 255 00697 } WlzEffAnlDataType; 00698 00699 /*! 00700 * \enum _WlzEffAnlDataType 00701 * \ingroup WlzExtFF 00702 * \brief Valid Analyze data type values. 00703 * Typedef: ::WlzEffAnlOrient 00704 */ 00705 typedef enum _WlzEffAnlOrient 00706 { 00707 WLZEFF_ANL_ORIENT_TU = 0, /*!< Transverse unflipped. */ 00708 WLZEFF_ANL_ORIENT_CU = 1, /*!< Coronal unflipped. */ 00709 WLZEFF_ANL_ORIENT_SU = 2, /*!< Sagital unflipped. */ 00710 WLZEFF_ANL_ORIENT_TF = 3, /*!< Transverse flipped. */ 00711 WLZEFF_ANL_ORIENT_CF = 4, /*!< Coronal flipped. */ 00712 WLZEFF_ANL_ORIENT_SF = 5 /*!< Sagital flipped. */ 00713 } WlzEffAnlOrient; 00714 00715 /*! 00716 * \struct _WlzEffAnlComplex 00717 * \ingroup WlzExtFF 00718 * \brief Analyze 7.5 complex number representation. 00719 * Typedef: ::WlzEffAnlComplex 00720 */ 00721 typedef struct _WlzEffAnlComplex 00722 { 00723 float real; 00724 float imag; 00725 } WlzEffAnlComplex; 00726 00727 /*! 00728 * \struct _WlzEffAnlHeaderKey 00729 * \ingroup WlzExtFF 00730 * \brief Analyze 7.5 file header key. 00731 * Typedef: ::WlzEffAnlFileKey 00732 */ 00733 typedef struct _WlzEffAnlHeaderKey 00734 { 00735 int hdrSz; /*!< Size of header in bytes: 4 00736 bytes. */ 00737 char dataType[10]; /*!< Data type: 10 bytes. */ 00738 char dbName[18]; /*!< 18 bytes. */ 00739 int extents; /*!< Should be 16384: 4 bytes. */ 00740 short sessionErr; /*!< Session error: 2 bytes. */ 00741 char regular; /*!< Must be 'r' to indicate that the 00742 images are the same size: 1 00743 byte. */ 00744 char hKeyUn0; /*!< 1 byte. 00745 Total = 40 bytes. */ 00746 } WlzEffAnlFileKey; 00747 00748 /*! 00749 * \struct _WlzEffAnlImageDim 00750 * \ingroup WlzExtFF 00751 * \brief Analyze 7.5 file header structure for the image dimensions. 00752 * Typedef: ::WlzEffAnlImageDim 00753 */ 00754 typedef struct _WlzEffAnlImageDim 00755 { 00756 short dim[8]; /*!< Array of the image dimensions. 00757 The number of dimensions is 00758 usually 4 with; 00759 [0] = number of dimensions, 00760 [1] = number of columns (X), 00761 [2] = number of lines (Y), 00762 [3] = number of planes (Z), 00763 [4] = number of time points. 00764 16 bytes. */ 00765 short unused8; /*!< Unused. 2 bytes. */ 00766 short unused9; /*!< Unused. 2 bytes. */ 00767 short unused10; /*!< Unused. 2 bytes. */ 00768 short unused11; /*!< Unused. 2 bytes. */ 00769 short unused12; /*!< Unused. 2 bytes. */ 00770 short unused13; /*!< Unused. 2 bytes. */ 00771 short unused14; /*!< Unused. 2 bytes. */ 00772 short dataType; /*!< The data type for the image, which 00773 must be a member of 00774 enum::_WlzEffAnlDataType. 00775 2 bytes. */ 00776 short bitPix; /*!< Number of bits per pixel, which 00777 must be one of; 1, 8, 16, 32 or 00778 64. 2 bytes. */ 00779 short dimUn0; /*!< 2 bytes. */ 00780 float pixdim[8]; /*!< Real world pixel dimensions in mm 00781 and ms. The number of dimensions is 00782 usually 4 with; 00783 [0] = number of dimensions, 00784 [1] = x size (pixel width), 00785 [2] = y size (pixel height), 00786 [3] = z size (voxel depth), 00787 [4] = time interval. 00788 32 bytes.*/ 00789 float voxOffset; /*!< The byte offset in the ".img" file 00790 at which the pixels start. 00791 If negative then the absolute value 00792 applies to every image in the file. 00793 4 bytes. */ 00794 float fUnused1; /*!< 4 bytes. */ 00795 float fUnused2; /*!< 4 bytes. */ 00796 float fUnused3; /*!< 4 bytes. */ 00797 float calMax; /*!< Maximum calibratin value. 00798 4 bytes. */ 00799 float calMin; /*!< Minimum calibratin value. 00800 4 bytes. */ 00801 float compressed; /*!< 4 bytes. */ 00802 float verified; /*!< 4 bytes. */ 00803 int glMax; /*!< Maximum pixel value. 4 bytes. */ 00804 int glMin; /*!< Minimum pixel value. 4 bytes. 00805 Total = 108 bytes.*/ 00806 } WlzEffAnlImageDim; 00807 00808 00809 /*! 00810 * \struct _WlzEffAnlDataHistory 00811 * \ingroup WlzExtFF 00812 * \brief Analyze 7.5 file header structure for the image history. 00813 * Typedef: ::WlzEffAnlDataHistory 00814 */ 00815 typedef struct _WlzEffAnlDataHistory 00816 { 00817 char descrip[80]; /*!< Description: 80 bytes. */ 00818 char auxFile[24]; /*!< 24 bytes. */ 00819 char orient; /*!< Slice orientation, which must 00820 be a member of 00821 enum::_WlzEffAnlOrient. 00822 This may be used by Analyze to 00823 determine whether images should be 00824 flipped before being displayed. 00825 1 byte. */ 00826 char originator[10]; /*!< 10 bytes. */ 00827 char generated[10]; /*!< 10 bytes. */ 00828 char scanNum[10]; /*!< 10 bytes. */ 00829 char patientId[10]; /*!< 10 bytes. */ 00830 char expDate[10]; /*!< 10 bytes. */ 00831 char expTime[10]; /*!< 10 bytes. */ 00832 char hisUn0[3]; /*!< 3 bytes. */ 00833 int views; /*!< 4 bytes. */ 00834 int volsAdded; /*!< 4 bytes. */ 00835 int startField; /*!< 4 bytes. */ 00836 int fieldSkip; /*!< 4 bytes. */ 00837 int oMax; /*!< 4 bytes. */ 00838 int oMin; /*!< 4 bytes. */ 00839 int sMax; /*!< 4 bytes. */ 00840 int sMin; /*!< 4 bytes. */ 00841 } WlzEffAnlDataHistory; 00842 00843 /*! 00844 * \struct _WlzEffAnlDsr 00845 * \ingroup WlzExtFF 00846 * \brief Analyze 7.5 file header. 00847 * Typedef: ::WlzEffAnlDsr 00848 */ 00849 typedef struct _WlzEffAnlDsr 00850 { 00851 struct _WlzEffAnlHeaderKey hk; /*!< 40 bytes. */ 00852 struct _WlzEffAnlImageDim dim; /*!< 108 bytes. */ 00853 struct _WlzEffAnlDataHistory hist; /*!< 200 bytes. */ 00854 } WlzEffAnlDsr; 00855 00856 #endif /* WLZ_EXT_BIND */ 00857 00858 #ifndef WLZ_EXT_BIND 00859 #ifdef __cplusplus 00860 } 00861 #endif /* __cplusplus */ 00862 #endif /* WLZ_EXT_BIND */ 00863 00864 #endif /* ! WLZ_EXTFFTYPE_H */