Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
mri_new.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008
00009
00010
00011
00012
00013 MRI_IMAGE *mri_new( int nx , int ny , MRI_TYPE kind )
00014 {
00015 MRI_IMAGE *newim ;
00016
00017 newim = mri_new_7D_generic( nx,ny , 1,1,1,1,1 , kind , TRUE ) ;
00018 return newim ;
00019 }
00020
00021
00022
00023 MRI_IMAGE *mri_new_vol_empty( int nx , int ny , int nz , MRI_TYPE kind )
00024 {
00025 MRI_IMAGE *newim ;
00026 newim = mri_new_7D_generic( nx,ny,nz , 1,1,1,1 , kind , FALSE ) ;
00027 return newim ;
00028 }
00029
00030
00031
00032 MRI_IMAGE *mri_new_vol( int nx , int ny , int nz , MRI_TYPE kind )
00033 {
00034 MRI_IMAGE *newim ;
00035 newim = mri_new_7D_generic( nx,ny,nz , 1,1,1,1 , kind , TRUE ) ;
00036 return newim ;
00037 }
00038
00039
00040
00041 MRI_IMAGE *mri_new_7D_generic(
00042 int nx, int ny, int nz, int nt, int nu, int nv, int nw,
00043 MRI_TYPE kind , int make_space )
00044 {
00045 MRI_IMAGE *newim ;
00046 int npix ;
00047
00048 ENTRY("mri_new_7D_generic") ;
00049
00050 newim = (MRI_IMAGE *)calloc( 1, sizeof(MRI_IMAGE) ) ;
00051
00052 if( newim == NULL ){
00053 fprintf( stderr , "malloc failure for new image pointer\n" ) ;
00054 MRI_FATAL_ERROR ;
00055 }
00056
00057 if( nx < 1 ) nx = 1 ;
00058 if( ny < 1 ) ny = 1 ;
00059 if( nz < 1 ) nz = 1 ;
00060 if( nt < 1 ) nt = 1 ;
00061 if( nu < 1 ) nu = 1 ;
00062 if( nv < 1 ) nv = 1 ;
00063 if( nw < 1 ) nw = 1 ;
00064
00065 newim->nx = nx ;
00066 newim->ny = ny ; newim->nxy = nx*ny ;
00067 newim->nz = nz ; newim->nxyz = nx*ny*nz ;
00068 newim->nt = nt ; newim->nxyzt = nx*ny*nz*nt ;
00069 newim->nu = nu ;
00070 newim->nv = nv ;
00071 newim->nw = nw ; newim->nvox = newim->nxyzt * nu*nv*nw ;
00072
00073 newim->kind = kind ;
00074 newim->name = NULL ;
00075
00076 newim->dx = newim->dy = newim->dz =
00077 newim->dt = newim->du = newim->dv = 1.0 ;
00078
00079 newim->dw = -666.0 ;
00080
00081 newim->xo = newim->yo = newim->zo =
00082 newim->to = newim->uo = newim->vo = newim->wo = 0.0 ;
00083
00084 newim->was_swapped = 0 ;
00085
00086 #ifdef USE_MRI_LABELS
00087 newim->xlab[0] = '\0' ;
00088 newim->ylab[0] = '\0' ;
00089 newim->zlab[0] = '\0' ;
00090 newim->tlab[0] = '\0' ;
00091 newim->ulab[0] = '\0' ;
00092 newim->vlab[0] = '\0' ;
00093 newim->wlab[0] = '\0' ;
00094 #endif
00095
00096 #ifdef USE_MRI_DELAY
00097 newim->fname = NULL ;
00098 newim->foffset = newim->fondisk = 0 ;
00099 #endif
00100
00101 npix = newim->nvox ;
00102
00103 switch( kind ){
00104
00105 case MRI_byte:
00106 if( make_space )
00107 newim->im.byte_data = (byte *)calloc( npix,sizeof(byte) ) ;
00108 else
00109 newim->im.byte_data = NULL ;
00110 newim->pixel_size = sizeof(byte) ;
00111 break ;
00112
00113 case MRI_short:
00114 if( make_space )
00115 newim->im.short_data = (short *)calloc( npix,sizeof(short) ) ;
00116 else
00117 newim->im.short_data = NULL ;
00118 newim->pixel_size = sizeof(short) ;
00119 break ;
00120
00121 case MRI_int:
00122 if( make_space )
00123 newim->im.int_data = (int *)calloc( npix,sizeof(int) ) ;
00124 else
00125 newim->im.int_data = NULL ;
00126 newim->pixel_size = sizeof(int) ;
00127 break ;
00128
00129 case MRI_float:
00130 if( make_space )
00131 newim->im.float_data = (float *)calloc( npix,sizeof(float) ) ;
00132 else
00133 newim->im.float_data = NULL ;
00134 newim->pixel_size = sizeof(float) ;
00135 break ;
00136
00137 case MRI_double:
00138 if( make_space )
00139 newim->im.double_data = (double *)calloc( npix,sizeof(double) ) ;
00140 else
00141 newim->im.double_data = NULL ;
00142 newim->pixel_size = sizeof(double) ;
00143 break ;
00144
00145 case MRI_complex:
00146 if( make_space )
00147 newim->im.complex_data = (complex *)calloc( npix,sizeof(complex) ) ;
00148 else
00149 newim->im.complex_data = NULL ;
00150 newim->pixel_size = sizeof(complex) ;
00151 break ;
00152
00153 case MRI_rgb:
00154 if( make_space )
00155 newim->im.rgb_data = (byte *)calloc( 3*npix,sizeof(byte) ) ;
00156 else
00157 newim->im.rgb_data = NULL ;
00158 newim->pixel_size = 3 * sizeof(byte) ;
00159 break ;
00160
00161 case MRI_rgba:
00162 if( make_space )
00163 newim->im.rgba_data = (rgba *)calloc( npix,sizeof(rgba) ) ;
00164 else
00165 newim->im.rgb_data = NULL ;
00166 newim->pixel_size = sizeof(rgba) ;
00167 break ;
00168
00169 default:
00170 fprintf( stderr , "mri_new: unrecognized image kind %d\n",(int)kind ) ;
00171 MRI_FATAL_ERROR ;
00172 }
00173
00174 if( make_space && mri_data_pointer(newim) == NULL ){
00175 fprintf( stderr , "malloc failure for image space: %d bytes\n",npix*newim->pixel_size ) ;
00176 MRI_FATAL_ERROR ;
00177 }
00178
00179 RETURN(newim) ;
00180 }