Doxygen Source Code Documentation
thd_fdto2D.c File Reference
#include "mrilib.h"
#include "thd.h"
Go to the source code of this file.
Functions | |
MRI_IMAGE * | FD_brick_to_mri (int kslice, int ival, FD_brick *br) |
Function Documentation
|
Definition at line 17 of file thd_fdto2D.c. References base, FD_brick::d1, FD_brick::d2, FD_brick::d3, THD_3dim_dataset::dblk, FD_brick::del1, FD_brick::del2, FD_brick::del3, FD_brick::dset, DSET_ARRAY, DSET_BRICK_FACTOR, DSET_BRICK_TYPE, MRI_IMAGE::dx, MRI_IMAGE::dy, MRI_IMAGE::dz, FD_brick::e1, FD_brick::e2, MRI_BYTE_PTR, MRI_COMPLEX_PTR, MRI_DOUBLE_PTR, MRI_FLOAT_PTR, mri_free(), MRI_INT_PTR, mri_new(), MRI_RGB_PTR, mri_scale_to_float(), MRI_SHORT_PTR, FD_brick::n1, FD_brick::n2, THD_datablock::nvals, FD_brick::start, STATUS, THD_load_datablock(), and typ. Referenced by main(), and T3D_getim().
00018 { 00019 MRI_IMAGE * im ; /* output */ 00020 register int ii,di,ei , jj,dj,ej , base , pp ; 00021 char * iar ; /* brick in the input */ 00022 MRI_TYPE typ ; 00023 00024 /** desire a fake image **/ 00025 00026 if( ival < 0 ){ 00027 im = mri_new( br->n1 , br->n2 , MRI_short ) ; 00028 im->dx = br->del1 ; 00029 im->dy = br->del2 ; 00030 im->dz = br->del3 ; 00031 return im ; 00032 } 00033 00034 /** otherwise, get ready for a real image **/ 00035 00036 if( ival >= br->dset->dblk->nvals ) return NULL ; 00037 00038 iar = DSET_ARRAY(br->dset,ival) ; 00039 00040 if( iar == NULL ){ /* if data needs to be loaded from disk */ 00041 (void) THD_load_datablock( br->dset->dblk ) ; 00042 iar = DSET_ARRAY(br->dset,ival) ; 00043 if( iar == NULL ) return NULL ; 00044 } 00045 00046 typ = DSET_BRICK_TYPE(br->dset,ival) ; 00047 im = mri_new( br->n1 , br->n2 , typ ) ; 00048 im->dx = br->del1 ; 00049 im->dy = br->del2 ; 00050 im->dz = br->del3 ; 00051 00052 switch( typ ){ 00053 00054 default: /* don't know what to do --> return nada */ 00055 mri_free( im ) ; 00056 return NULL ; 00057 00058 case MRI_byte:{ 00059 register byte * ar = MRI_BYTE_PTR(im) ; 00060 register byte * bar = (byte *) iar ; 00061 00062 di = br->d1 ; dj = br->d2 ; /* strides */ 00063 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00064 base = br->start + kslice * br->d3 ; 00065 00066 pp = 0 ; 00067 for( jj=0 ; jj != ej ; jj += dj ) 00068 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00069 } 00070 break ; 00071 00072 case MRI_short:{ 00073 register short * ar = MRI_SHORT_PTR(im) ; 00074 register short * bar = (short *) iar ; 00075 00076 di = br->d1 ; dj = br->d2 ; /* strides */ 00077 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00078 base = br->start + kslice * br->d3 ; 00079 00080 pp = 0 ; 00081 for( jj=0 ; jj != ej ; jj += dj ) 00082 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00083 } 00084 break ; 00085 00086 case MRI_float:{ 00087 register float * ar = MRI_FLOAT_PTR(im) ; 00088 register float * bar = (float *) iar ; 00089 00090 di = br->d1 ; dj = br->d2 ; /* strides */ 00091 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00092 base = br->start + kslice * br->d3 ; 00093 00094 pp = 0 ; 00095 for( jj=0 ; jj != ej ; jj += dj ) 00096 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00097 } 00098 break ; 00099 00100 case MRI_int:{ 00101 register int * ar = MRI_INT_PTR(im) ; 00102 register int * bar = (int *) iar ; 00103 00104 di = br->d1 ; dj = br->d2 ; /* strides */ 00105 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00106 base = br->start + kslice * br->d3 ; 00107 00108 pp = 0 ; 00109 for( jj=0 ; jj != ej ; jj += dj ) 00110 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00111 } 00112 break ; 00113 00114 case MRI_double:{ 00115 register double * ar = MRI_DOUBLE_PTR(im) ; 00116 register double * bar = (double *) iar ; 00117 00118 di = br->d1 ; dj = br->d2 ; /* strides */ 00119 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00120 base = br->start + kslice * br->d3 ; 00121 00122 pp = 0 ; 00123 for( jj=0 ; jj != ej ; jj += dj ) 00124 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00125 } 00126 break ; 00127 00128 case MRI_complex:{ 00129 register complex * ar = MRI_COMPLEX_PTR(im) ; 00130 register complex * bar = (complex *) iar ; 00131 00132 di = br->d1 ; dj = br->d2 ; /* strides */ 00133 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00134 base = br->start + kslice * br->d3 ; 00135 00136 pp = 0 ; 00137 for( jj=0 ; jj != ej ; jj += dj ) 00138 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00139 } 00140 break ; 00141 00142 case MRI_rgb:{ /* 15 Apr 2002 */ 00143 register rgbyte * ar = (rgbyte *) MRI_RGB_PTR(im) ; 00144 register rgbyte * bar = (rgbyte *) iar ; 00145 00146 di = br->d1 ; dj = br->d2 ; /* strides */ 00147 ei = br->e1 ; ej = br->e2 ; /* final indices */ 00148 base = br->start + kslice * br->d3 ; 00149 00150 pp = 0 ; 00151 for( jj=0 ; jj != ej ; jj += dj ) 00152 for( ii=0 ; ii != ei ; ii += di ) ar[pp++] = bar[ii+(jj+base)] ; 00153 } 00154 break ; 00155 00156 } 00157 00158 if( DSET_BRICK_FACTOR(br->dset,ival) != 0.0 ){ 00159 MRI_IMAGE * qim ; 00160 STATUS(" scaling to float"); 00161 qim = mri_scale_to_float( DSET_BRICK_FACTOR(br->dset,ival) , im ) ; 00162 mri_free(im) ; im = qim ; 00163 } 00164 00165 return im ; 00166 } |