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)7 void 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