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