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 }
|