Doxygen Source Code Documentation
        
Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search   
mri_cut.c
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 #include "mrilib.h"
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 MRI_IMAGE * mri_cut_2D( MRI_IMAGE * im , int xa, int xb, int ya, int yb )
00017 {
00018    char * par , * qar , * irow , * orow ;
00019    MRI_IMAGE * qim ;
00020    int qx,qy , ps , xx,yy , nx, xps ;
00021 
00022 ENTRY("mri_cut_2D") ;
00023 
00024    
00025 
00026    if( im == NULL || xa < 0 || xb >= im->nx || xb < xa ||
00027                      ya < 0 || yb >= im->ny || yb < ya   ) RETURN(NULL) ;
00028 
00029    
00030 
00031    par = (char *) mri_data_pointer( im ) ;
00032    if( par == NULL ) RETURN(NULL) ;          
00033 
00034    
00035 
00036    qx = xb - xa + 1 ; qy = yb - ya + 1 ;    
00037    qim = mri_new( qx , qy , im->kind ) ;    
00038 
00039    ps = im->pixel_size ; xps = qx * ps ;    
00040    qar = (char *) mri_data_pointer( qim ) ; 
00041    nx = im->nx ;
00042 
00043    for( yy=ya ; yy <= yb ; yy++ ){          
00044       irow = par + (yy*nx+xa)*ps ;          
00045       orow = qar + (yy-ya)*xps ;            
00046       memcpy( orow , irow , xps ) ;         
00047    }
00048 
00049    MRI_COPY_AUX(qim,im) ;
00050    RETURN(qim) ;
00051 }
00052 
00053 
00054 
00055 
00056 
00057 
00058 MRI_IMAGE * mri_cut_3D( MRI_IMAGE * im ,
00059                         int xa, int xb, int ya, int yb, int za, int zb )
00060 {
00061    char * par , * qar , * irow , * orow ;
00062    MRI_IMAGE * qim ;
00063    int qx,qy,qz, ps , xx,yy,zz , nx,nxy , xps ;
00064 
00065 ENTRY("mri_cut_3D") ;
00066 
00067    
00068 
00069    if( im == NULL || xa < 0 || xb >= im->nx || xb < xa ||
00070                      ya < 0 || yb >= im->ny || yb < ya ||
00071                      za < 0 || zb >= im->nz || zb < za   ) RETURN(NULL) ;
00072 
00073    
00074 
00075    par = (char *) mri_data_pointer( im ) ;
00076    if( par == NULL ) RETURN(NULL) ;          
00077 
00078    
00079 
00080    qx = xb - xa + 1; qy = yb - ya + 1; qz = zb - za + 1; 
00081    qim = mri_new_vol( qx , qy , qz , im->kind ) ;        
00082 
00083    ps  = im->pixel_size ; xps = qx * ps ;    
00084    qar = (char *) mri_data_pointer( qim ) ;  
00085    nx  = im->nx ; nxy = nx * im->ny ;
00086 
00087    for( zz=za ; zz <= zb ; zz++ ){             
00088      for( yy=ya ; yy <= yb ; yy++ ){           
00089        irow = par + (zz*nxy+yy*nx+xa)*ps ;     
00090        orow = qar + ((zz-za)*qy+(yy-ya))*xps ; 
00091        memcpy( orow , irow , xps ) ;           
00092      }
00093    }
00094 
00095    MRI_COPY_AUX(qim,im) ;
00096    RETURN(qim) ;
00097 }