Doxygen Source Code Documentation
thd_dsetto3D.c File Reference
#include "mrilib.h"
#include "thd.h"
Go to the source code of this file.
Functions | |
MRI_IMAGE * | THD_extract_float_brick (int iv, THD_3dim_dataset *dset) |
Function Documentation
|
Definition at line 9 of file thd_dsetto3D.c. References CABS, DSET_ARRAY, DSET_BRICK, DSET_BRICK_FACTOR, DSET_BRICK_TYPE, DSET_NVALS, DSET_NVOX, ENTRY, MRI_FLOAT_PTR, mri_free(), mri_new_conforming, RETURN, and var. Referenced by main().
00010 { 00011 MRI_IMAGE * im ; 00012 float * var ; 00013 register int ii , nvox ; 00014 00015 ENTRY("THD_extract_float_brick") ; 00016 00017 if( iv < 0 || !ISVALID_DSET(dset) || iv >= DSET_NVALS(dset) ) RETURN(NULL); 00018 00019 im = mri_new_conforming( DSET_BRICK(dset,iv) , MRI_float ) ; 00020 var = MRI_FLOAT_PTR(im) ; 00021 nvox = DSET_NVOX(dset) ; 00022 00023 /*-- extract/scale brick into var --*/ 00024 00025 switch( DSET_BRICK_TYPE(dset,iv) ){ 00026 00027 default: 00028 fprintf(stderr,"Can't handle sub-bricks of type %s\n", 00029 MRI_TYPE_name[DSET_BRICK_TYPE(dset,iv)]) ; 00030 mri_free(im) ; 00031 RETURN(NULL) ; 00032 00033 case MRI_short:{ 00034 register short *dar = DSET_ARRAY(dset,iv) ; 00035 register float fac = DSET_BRICK_FACTOR(dset,iv) ; 00036 if( fac == 0.0 ) fac = 1.0 ; 00037 for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ; 00038 } 00039 break ; 00040 00041 case MRI_byte:{ 00042 register byte *dar = DSET_ARRAY(dset,iv) ; 00043 register float fac = DSET_BRICK_FACTOR(dset,iv) ; 00044 if( fac == 0.0 ) fac = 1.0 ; 00045 for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ; 00046 } 00047 break ; 00048 00049 case MRI_float:{ 00050 register float *dar = DSET_ARRAY(dset,iv) ; 00051 register float fac = DSET_BRICK_FACTOR(dset,iv) ; 00052 if( fac == 0.0 ) fac = 1.0 ; 00053 for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ; 00054 } 00055 break ; 00056 00057 case MRI_complex:{ 00058 register complex *dar = DSET_ARRAY(dset,iv) ; 00059 register float fac = DSET_BRICK_FACTOR(dset,iv) ; 00060 if( fac == 0.0 ) fac = 1.0 ; 00061 for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*CABS(dar[ii]) ; 00062 } 00063 break ; 00064 00065 case MRI_int:{ 00066 register int *dar = DSET_ARRAY(dset,iv) ; 00067 register float fac = DSET_BRICK_FACTOR(dset,iv) ; 00068 if( fac == 0.0 ) fac = 1.0 ; 00069 for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ; 00070 } 00071 break ; 00072 00073 case MRI_double:{ 00074 register double *dar = DSET_ARRAY(dset,iv) ; 00075 register float fac = DSET_BRICK_FACTOR(dset,iv) ; 00076 if( fac == 0.0 ) fac = 1.0 ; 00077 for( ii=0 ; ii < nvox ; ii++ ) var[ii] = fac*dar[ii] ; 00078 } 00079 break ; 00080 00081 case MRI_rgb:{ 00082 register byte *dar = DSET_ARRAY(dset,iv) ; 00083 for( ii=0 ; ii < nvox ; ii++ ) 00084 var[ii] = 0.299*dar[3*ii] + 0.587*dar[3*ii+1] + 0.114*dar[3*ii+2] ; 00085 } 00086 } 00087 00088 RETURN(im) ; 00089 } |