1 /*****************************************************************************
2    Major portions of this software are copyrighted by the Medical College
3    of Wisconsin, 1994-2000, and are released under the Gnu General Public
4    License, Version 2.  See the file README.Copyright for details.
5 ******************************************************************************/
6 
7 #include "mrilib.h"
8 
9 /*---------------------------------------------------------------
10    Linearly scale values so that largest value in volume is 10000
11    (255 for byte data volumes)
12 -----------------------------------------------------------------*/
13 
MCW_scale_to_max(int nx,int ny,int nz,int ftype,void * fim)14 void MCW_scale_to_max( int nx, int ny, int nz , int ftype , void * fim )
15 {
16    register int nxyz = nx * ny * nz , ii ;
17    register float fac ;
18 
19 ENTRY("MCW_scale_to_max") ;
20 
21    if( fim == NULL ) EXRETURN ;
22 
23    switch( ftype ){
24 
25       case MRI_byte:{
26          register byte * bfar = (byte *) fim ;
27          register byte max , val ;
28          max = bfar[0] ;
29          for( ii=1 ; ii < nxyz ; ii++ ){
30             val = bfar[ii] ; if( val > max ) max = val ;
31          }
32          if( max == 0 ) EXRETURN ;
33          fac = 255.0 / max ;
34          for( ii=0 ; ii < nxyz ; ii++ ) bfar[ii] *= fac ;
35       }
36       break ;
37 
38       case MRI_short:{
39          register short * sfar = (short *) fim ;
40          register short max , val ;
41          max = abs(sfar[0]) ;
42          for( ii=1 ; ii < nxyz ; ii++ ){
43             val = abs(sfar[ii]) ; if( val > max ) max = val ;
44          }
45          if( max == 0 ) EXRETURN ;
46          fac = 10000.0 / max ;
47          for( ii=0 ; ii < nxyz ; ii++ ) sfar[ii] *= fac ;
48       }
49       break ;
50 
51       case MRI_float:{
52          register float * ffar = (float *) fim ;
53          register float max , val ;
54          max = fabs(ffar[0]) ;
55          for( ii=1 ; ii < nxyz ; ii++ ){
56             val = fabs(ffar[ii]) ; if( val > max ) max = val ;
57          }
58          if( max == 0.0 ) EXRETURN ;
59          fac = 10000.0 / max ;
60          for( ii=0 ; ii < nxyz ; ii++ ) ffar[ii] *= fac ;
61       }
62       break ;
63 
64       case MRI_complex:{
65          register complex * cfar = (complex *) fim ;
66          register float max , val ;
67          max = CABS(cfar[0]) ;
68          for( ii=1 ; ii < nxyz ; ii++ ){
69             val = CABS(cfar[ii]) ; if( val > max ) max = val ;
70          }
71          if( max == 0.0 ) EXRETURN ;
72          fac = 10000.0 / max ;
73          for( ii=0 ; ii < nxyz ; ii++ ){
74             cfar[ii].r *= fac ; cfar[ii].i *= fac ;
75          }
76       }
77       break ;
78    }
79 
80    EXRETURN ;
81 }
82