Doxygen Source Code Documentation
mri_write_analyze.c File Reference
#include "mrilib.h"
#include "mayo_analyze.h"
Go to the source code of this file.
Functions | |
void | mri_write_analyze (char *fname, MRI_IMAGE *im) |
Function Documentation
|
Definition at line 90 of file mri_write_analyze.c. References AFMALL, AFNI_yesenv(), ANDT_COMPLEX, ANDT_DOUBLE, ANDT_FLOAT, ANDT_RGB, ANDT_SIGNED_INT, ANDT_SIGNED_SHORT, ANDT_UNSIGNED_CHAR, image_dimension::bitpix, image_dimension::datatype, header_key::db_name, data_history::descrip, image_dimension::dim, dsr::dime, MRI_IMAGE::dt, MRI_IMAGE::du, MRI_IMAGE::dv, MRI_IMAGE::dw, MRI_IMAGE::dx, MRI_IMAGE::dy, MRI_IMAGE::dz, ENTRY, free, image_dimension::funused1, image_dimension::glmax, image_dimension::glmin, dsr::hist, dsr::hk, MRI_IMAGE::kind, mri_data_pointer(), MRI_DIMENSIONALITY, mri_max(), mri_min(), MRI_IMAGE::nt, MRI_IMAGE::nu, MRI_IMAGE::nv, MRI_IMAGE::nvox, MRI_IMAGE::nw, MRI_IMAGE::nx, MRI_IMAGE::ny, MRI_IMAGE::nz, data_history::originator, image_dimension::pixdim, MRI_IMAGE::pixel_size, header_key::regular, header_key::sizeof_hdr, MRI_IMAGE::xo, MRI_IMAGE::yo, and MRI_IMAGE::zo. Referenced by main().
00091 { 00092 struct dsr hdr ; /* ANALYZE .hdr */ 00093 void *ip ; 00094 FILE *fp ; 00095 char *fff ; 00096 00097 ENTRY("mri_write_analyze") ; 00098 00099 /*-- check inputs for sanity --*/ 00100 00101 if( fname == NULL || fname[0] == '\0' || im == NULL ) EXRETURN ; 00102 ip = mri_data_pointer(im) ; 00103 00104 /*-- clear header --*/ 00105 00106 memset( &hdr , 0 , sizeof(struct dsr) ) ; 00107 00108 /*-- set random header stuff --*/ 00109 00110 hdr.hk.sizeof_hdr = sizeof(struct dsr) ; 00111 hdr.hk.regular = 'r' ; 00112 00113 sprintf( hdr.hk.db_name , "%.17s" , fname ) ; 00114 #if 0 00115 sprintf( hdr.hist.descrip , "via AFNI: %.68s" , fname ) ; 00116 #endif 00117 00118 /*-- set data dimensions --*/ 00119 00120 hdr.dime.dim[0] = MRI_DIMENSIONALITY(im) ; 00121 hdr.dime.dim[1] = im->nx ; hdr.dime.pixdim[1] = im->dx ; 00122 hdr.dime.dim[2] = im->ny ; hdr.dime.pixdim[2] = im->dy ; 00123 hdr.dime.dim[3] = im->nz ; hdr.dime.pixdim[3] = im->dz ; 00124 hdr.dime.dim[4] = im->nt ; hdr.dime.pixdim[4] = im->dt ; 00125 hdr.dime.dim[5] = im->nu ; hdr.dime.pixdim[5] = im->du ; 00126 hdr.dime.dim[6] = im->nv ; hdr.dime.pixdim[6] = im->dv ; 00127 hdr.dime.dim[7] = im->nw ; hdr.dime.pixdim[7] = im->dw ; 00128 00129 hdr.dime.funused1 = 1.0 ; /* SPM scale factor */ 00130 00131 /*-- set data type --*/ 00132 00133 switch( im->kind ){ 00134 00135 default: EXRETURN ; /* bad */ 00136 00137 case MRI_byte: hdr.dime.datatype = ANDT_UNSIGNED_CHAR; break; 00138 case MRI_short: hdr.dime.datatype = ANDT_SIGNED_SHORT ; break; 00139 case MRI_int: hdr.dime.datatype = ANDT_SIGNED_INT ; break; 00140 case MRI_float: hdr.dime.datatype = ANDT_FLOAT ; break; 00141 case MRI_complex: hdr.dime.datatype = ANDT_COMPLEX ; break; 00142 case MRI_double: hdr.dime.datatype = ANDT_DOUBLE ; break; 00143 case MRI_rgb: hdr.dime.datatype = ANDT_RGB ; break; 00144 } 00145 00146 hdr.dime.bitpix = 8*im->pixel_size ; 00147 00148 if( ip != NULL ){ 00149 hdr.dime.glmin = mri_min( im ) ; 00150 hdr.dime.glmax = mri_max( im ) ; 00151 } else { 00152 hdr.dime.glmin = 0.0 ; 00153 hdr.dime.glmax = 0.0 ; 00154 } 00155 00156 /*--KRH 03/11/04 writing out originator field from AFNI origin--*/ 00157 /*- adding 1.5 to value for rounding (+0.5) and conversion */ 00158 /* to 1-based matlab arrays (+1.0) - */ 00159 /*--change abs() to -() 25 Mar 2004 [rickr] */ 00160 00161 if( AFNI_yesenv("AFNI_ANALYZE_ORIGINATOR") ){ 00162 short xyzuv[5] = {0}; 00163 xyzuv[0] = -im->xo/im->dx + 1.5; 00164 xyzuv[1] = -im->yo/im->dy + 1.5; 00165 xyzuv[2] = -im->zo/im->dz + 1.5; 00166 memcpy( hdr.hist.originator, xyzuv, 10 ); 00167 } 00168 00169 /*-- write header --*/ 00170 00171 fff = AFMALL(char, strlen(fname)+16 ) ; 00172 00173 sprintf(fff,"%s.hdr",fname) ; 00174 fp = fopen( fff , "wb" ) ; 00175 if( fp == NULL ){ 00176 fprintf(stderr,"** Can't open file %s for output!\n",fff) ; 00177 free(fff) ; EXRETURN ; 00178 } 00179 fwrite( &hdr , sizeof(struct dsr) , 1 , fp ) ; 00180 fclose(fp) ; 00181 00182 if( ip == NULL ){ /* 30 Sep 2002: skip .img if data not present */ 00183 free(fff); EXRETURN; 00184 } 00185 00186 /*-- write image --*/ 00187 00188 sprintf(fff,"%s.img",fname) ; 00189 fp = fopen( fff , "wb" ) ; 00190 if( fp == NULL ){ 00191 fprintf(stderr,"** Can't open file %s for output!\n",fff) ; 00192 free(fff) ; EXRETURN ; 00193 } 00194 fwrite( ip , im->nvox , im->pixel_size , fp ) ; 00195 fclose(fp) ; 00196 00197 free(fff) ; EXRETURN ; 00198 } |