Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

mri_write_analyze.c

Go to the documentation of this file.
00001 #include "mrilib.h"
00002 #include "mayo_analyze.h"
00003 
00004 #if 0
00005 /*---------------------------------------------------------------*/
00006 
00007 static void swap_4(void *ppp)
00008 {
00009    unsigned char *pntr = (unsigned char *) ppp ;
00010    unsigned char b0, b1, b2, b3;
00011 
00012    b0 = *pntr; b1 = *(pntr+1); b2 = *(pntr+2); b3 = *(pntr+3);
00013    *pntr = b3; *(pntr+1) = b2; *(pntr+2) = b1; *(pntr+3) = b0;
00014 }
00015 
00016 /*---------------------------------------------------------------*/
00017 
00018 static void swap_8(void *ppp)
00019 {
00020    unsigned char *pntr = (unsigned char *) ppp ;
00021    unsigned char b0, b1, b2, b3;
00022    unsigned char b4, b5, b6, b7;
00023 
00024    b0 = *pntr    ; b1 = *(pntr+1); b2 = *(pntr+2); b3 = *(pntr+3);
00025    b4 = *(pntr+4); b5 = *(pntr+5); b6 = *(pntr+6); b7 = *(pntr+7);
00026 
00027    *pntr     = b7; *(pntr+1) = b6; *(pntr+2) = b5; *(pntr+3) = b4;
00028    *(pntr+4) = b3; *(pntr+5) = b2; *(pntr+6) = b1; *(pntr+7) = b0;
00029 }
00030 
00031 /*---------------------------------------------------------------*/
00032 
00033 static void swap_2(void *ppp)
00034 {
00035    unsigned char *pntr = (unsigned char *) ppp ;
00036    unsigned char b0, b1;
00037 
00038    b0 = *pntr; b1 = *(pntr+1);
00039    *pntr = b1; *(pntr+1) = b0;
00040 }
00041 
00042 /*---------------------------------------------------------------*/
00043 
00044 static void swap_analyze_hdr( struct dsr *pntr )
00045 {
00046    swap_4(&pntr->hk.sizeof_hdr) ;
00047    swap_4(&pntr->hk.extents) ;
00048    swap_2(&pntr->hk.session_error) ;
00049    swap_2(&pntr->dime.dim[0]) ;
00050    swap_2(&pntr->dime.dim[1]) ;
00051    swap_2(&pntr->dime.dim[2]) ;
00052    swap_2(&pntr->dime.dim[3]) ;
00053    swap_2(&pntr->dime.dim[4]) ;
00054    swap_2(&pntr->dime.dim[5]) ;
00055    swap_2(&pntr->dime.dim[6]) ;
00056    swap_2(&pntr->dime.dim[7]) ;
00057 #if 0
00058    swap_2(&pntr->dime.unused1) ;
00059 #endif
00060    swap_2(&pntr->dime.datatype) ;
00061    swap_2(&pntr->dime.bitpix) ;
00062    swap_4(&pntr->dime.pixdim[0]) ;
00063    swap_4(&pntr->dime.pixdim[1]) ;
00064    swap_4(&pntr->dime.pixdim[2]) ;
00065    swap_4(&pntr->dime.pixdim[3]) ;
00066    swap_4(&pntr->dime.pixdim[4]) ;
00067    swap_4(&pntr->dime.pixdim[5]) ;
00068    swap_4(&pntr->dime.pixdim[6]) ;
00069    swap_4(&pntr->dime.pixdim[7]) ;
00070    swap_4(&pntr->dime.vox_offset) ;
00071    swap_4(&pntr->dime.funused1) ;
00072    swap_4(&pntr->dime.funused2) ;
00073    swap_4(&pntr->dime.cal_max) ;
00074    swap_4(&pntr->dime.cal_min) ;
00075    swap_4(&pntr->dime.compressed) ;
00076    swap_4(&pntr->dime.verified) ;
00077    swap_2(&pntr->dime.dim_un0) ;
00078    swap_4(&pntr->dime.glmax) ;
00079    swap_4(&pntr->dime.glmin) ;
00080    return ;
00081 }
00082 #endif
00083 
00084 /*-----------------------------------------------------------------
00085   Write an image in ANALYZE 7.5 format;
00086   fname.hdr and fname.img will be written, in native byte order.
00087                                                 29 Nov 2001 - RWCox
00088 -------------------------------------------------------------------*/
00089 
00090 void mri_write_analyze( char *fname , MRI_IMAGE *im )
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 }
 

Powered by Plone

This site conforms to the following standards: