Doxygen Source Code Documentation
Main Page Alphabetical List Data Structures File List Data Fields Globals Search
edt_substbrick.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "mrilib.h"
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 void EDIT_substitute_brick(THD_3dim_dataset * dset, int ival, int ftype,void * fim)
00026 {
00027 THD_datablock * dblk ;
00028 MRI_IMAGE * newim , * oldim ;
00029 int nbytes , nullfim = (fim == NULL) ;
00030
00031 ENTRY("EDIT_substitute_brick") ;
00032
00033
00034
00035 if( ! ISVALID_3DIM_DATASET(dset) ) EXRETURN;
00036 if( dset->dblk->brick == NULL ) EXRETURN;
00037 if( dset->dblk->malloc_type != DATABLOCK_MEM_MALLOC )EXRETURN;
00038 if( ival >= dset->dblk->nvals || ival < 0 ) EXRETURN;
00039 if( ftype < 0 || ftype > LAST_MRI_TYPE ) EXRETURN;
00040
00041 oldim = DSET_BRICK(dset,ival) ; if( oldim == NULL ) EXRETURN;
00042
00043 newim = mri_empty_conforming( oldim , ftype ) ;
00044 nbytes = newim->nvox * newim->pixel_size ;
00045 mri_free( oldim ) ;
00046
00047 if( nullfim ){
00048 fim = calloc( 1,nbytes ) ;
00049 if( fim == NULL ){
00050 fprintf(stderr,"\n*** malloc error for dataset sub-brick\n") ; EXIT(1) ;
00051 }
00052 }
00053 mri_fix_data_pointer( fim , newim ) ;
00054 DSET_BRICK(dset,ival) = newim ;
00055
00056
00057
00058 dset->dblk->total_bytes += (nbytes - dset->dblk->brick_bytes[ival]) ;
00059 dset->dblk->brick_bytes[ival] = nbytes ;
00060
00061 DSET_CRUSH_BSTAT(dset,ival) ;
00062
00063 EXRETURN ;
00064 }