1 #include "mrilib.h" 2 3 /*------------------------------------------------------------------- 4 Scale an image in place - 27 Nov 2001 5 ---------------------------------------------------------------------*/ 6 mri_scale_inplace(float fac,MRI_IMAGE * im)7void mri_scale_inplace( float fac , MRI_IMAGE *im ) 8 { 9 register int ii , nvox ; 10 void *vp ; 11 12 ENTRY("mri_scale_inplace") ; 13 14 if( im == NULL || fac == 1.0 || fac == 0.0 ) EXRETURN ; 15 vp = mri_data_pointer( im ) ; if( vp == NULL ) EXRETURN ; 16 nvox = im->nvox ; 17 18 switch( im->kind ){ 19 20 default: break ; 21 22 case MRI_byte:{ 23 byte *pp = (byte *) vp ; 24 for( ii=0 ; ii < nvox ; ii++ ) pp[ii] *= fac ; 25 } 26 break ; 27 28 case MRI_short:{ 29 short *pp = (short *) vp ; 30 for( ii=0 ; ii < nvox ; ii++ ) pp[ii] *= fac ; 31 } 32 break ; 33 34 case MRI_float:{ 35 float *pp = (float *) vp ; 36 for( ii=0 ; ii < nvox ; ii++ ) pp[ii] *= fac ; 37 } 38 break ; 39 40 case MRI_int:{ 41 int *pp = (int *) vp ; 42 for( ii=0 ; ii < nvox ; ii++ ) pp[ii] *= fac ; 43 } 44 break ; 45 46 case MRI_double:{ 47 double *pp = (double *) vp ; 48 for( ii=0 ; ii < nvox ; ii++ ) pp[ii] *= fac ; 49 } 50 break ; 51 52 case MRI_complex:{ 53 complex *pp = (complex *) vp ; 54 for( ii=0 ; ii < nvox ; ii++ ){ 55 pp[ii].r *= fac; pp[ii].i *= fac; 56 } 57 } 58 break ; 59 60 case MRI_rgb:{ 61 byte *pp = (byte *) vp ; 62 nvox *= 3 ; 63 for( ii=0 ; ii < nvox ; ii++ ) pp[ii] *= fac ; 64 } 65 break ; 66 } 67 68 EXRETURN ; 69 } 70