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 <stdlib.h>
8 #include <string.h>
9 #include "mrilib.h"
10 
main(int argc,char * argv[])11 int main( int argc , char * argv[] )
12 {
13    MRI_IMAGE *imin ;
14    float * maskar ;
15    int nxim , nyim , ii , npix ;
16 
17    if( argc < 2 || strncmp(argv[1],"-help",4) == 0 ){
18      printf("Usage: imdump input_image\n"
19             "* Prints out nonzero pixels in an image;\n"
20             "* Results to stdout; redirect (with >) to save to a file;\n"
21             "* Format: x-index y-index value, one pixel per line.\n" ) ;
22      exit(0) ;
23    }
24 
25    machdep() ;
26 
27    imin = mri_read_just_one( argv[1] ) ;
28    if( imin == NULL ) exit(1) ;
29    if( ! MRI_IS_2D(imin) ){
30       fprintf(stderr,"can only deal with 2D images!\n") ;
31       exit(1) ;
32    }
33 
34    nxim = imin->nx ;
35    nyim = imin->ny ;
36    npix = nxim * nyim ;
37 
38    switch( imin->kind ){
39 
40       default:
41          fprintf(stderr,"Unrecognized input image type!\a\n") ;
42          exit(1) ;
43 
44       case MRI_byte:{
45          int ix,jy ;
46          byte * arin , val ;
47          arin  = mri_data_pointer(imin) ;
48          for( jy=0 ; jy < nyim ; jy++ ){
49             for( ix=0 ; ix < nxim ; ix++ ){
50               val = arin[ix+jy*nxim] ;
51               if( val != 0 ) printf("%4d %4d %4d\n",ix,jy,val ) ;
52          }  }
53       } break ;
54 
55       case MRI_short:{
56          int ix,jy ;
57          short * arin , val ;
58          arin  = mri_data_pointer(imin) ;
59          for( jy=0 ; jy < nyim ; jy++ ){
60             for( ix=0 ; ix < nxim ; ix++ ){
61               val = arin[ix+jy*nxim] ;
62               if( val != 0 ) printf("%4d %4d %4d\n",ix,jy,val ) ;
63          }  }
64       } break ;
65 
66       case MRI_float:{
67          int ix,jy ;
68          float * arin , val ;
69          arin  = mri_data_pointer(imin) ;
70          for( jy=0 ; jy < nyim ; jy++ ){
71             for( ix=0 ; ix < nxim ; ix++ ){
72               val = arin[ix+jy*nxim] ;
73               if( val != 0 ) printf("%4d %4d %g\n",ix,jy,val ) ;
74          }  }
75       } break ;
76 
77       case MRI_int:{
78          int ix,jy ;
79          int * arin , val ;
80          arin  = mri_data_pointer(imin) ;
81          for( jy=0 ; jy < nyim ; jy++ ){
82             for( ix=0 ; ix < nxim ; ix++ ){
83               val = arin[ix+jy*nxim] ;
84               if( val != 0 ) printf("%4d %4d %4d\n",ix,jy,val ) ;
85          }  }
86       } break ;
87 
88       case MRI_double:{
89          int ix,jy ;
90          double * arin , val ;
91          arin  = mri_data_pointer(imin) ;
92          for( jy=0 ; jy < nyim ; jy++ ){
93             for( ix=0 ; ix < nxim ; ix++ ){
94               val = arin[ix+jy*nxim] ;
95               if( val != 0 ) printf("%4d %4d %g\n",ix,jy,val ) ;
96          }  }
97       } break ;
98 
99       case MRI_complex:{
100          int ix,jy ;
101          complex * arin , val ;
102          arin  = mri_data_pointer(imin) ;
103          for( jy=0 ; jy < nyim ; jy++ ){
104             for( ix=0 ; ix < nxim ; ix++ ){
105               val = arin[ix+jy*nxim] ;
106               if( val.r != 0 || val.i != 0 )
107                  printf("%4d %4d %g %g\n",ix,jy,val.r,val.i ) ;
108          }  }
109       } break ;
110    }
111 
112    exit(0) ;
113 }
114