Doxygen Source Code Documentation
mri_zeropad.c File Reference
#include "mrilib.h"Go to the source code of this file.
| Defines | |
| #define | SNEW(i, j) ((i+nxbot)+(j+nybot)*nxnew) | 
| #define | SOLD(i, j) (i+j*nxold) | 
| Functions | |
| MRI_IMAGE * | mri_zeropad_2D (int nxbot, int nxtop, int nybot, int nytop, MRI_IMAGE *fim) | 
Define Documentation
| 
 | 
| 
 | 
| 
 | 
| 
 | 
Function Documentation
| 
 | ||||||||||||||||||||||||
| 
 Definition at line 14 of file mri_zeropad.c. References ENTRY, fim, MRI_IMAGE::kind, MAX, MIN, MRI_BYTE_PTR, MRI_COMPLEX_PTR, mri_copy(), MRI_COPY_AUX, mri_data_pointer(), mri_datum_size(), MRI_DOUBLE_PTR, MRI_FLOAT_PTR, mri_free(), MRI_INT_PTR, mri_new(), MRI_RGB_PTR, MRI_SHORT_PTR, MRI_IMAGE::nx, MRI_IMAGE::ny, and RETURN. Referenced by AFNI_faceup(), and SPLASH_imseq_getim(). 
 00016 {
00017    int nxold,nyold , nxnew,nynew , nx,ny ;
00018    int ii,jj , iibot,iitop , jjbot,jjtop ;
00019    MRI_IMAGE * vim ;
00020 
00021 ENTRY("mri_zeropad_2D") ;
00022 
00023    /*- check for user stupidity -*/
00024 
00025    if( fim == NULL ) RETURN(NULL) ;
00026 
00027    nx = fim->nx ; ny = fim->ny ;
00028 
00029    /*- special case: just copy input -*/
00030 
00031    if( nxbot == 0 && nybot == 0 &&
00032        nxtop == 0 && nytop == 0    ){
00033 
00034       vim = mri_copy( fim ) ;
00035       RETURN(vim) ;
00036    }
00037 
00038    nxold = nx ; nxnew = nxold + nxbot + nxtop ;  /* dimensions */
00039    nyold = ny ; nynew = nyold + nybot + nytop ;
00040 
00041    iibot = MAX(0,-nxbot) ; iitop = MIN(nxold,nxold+nxtop) ;  /* range of data  */
00042    jjbot = MAX(0,-nybot) ; jjtop = MIN(nyold,nyold+nytop) ;  /* in old dataset */
00043 
00044    if( nxnew < 1 || iibot >= iitop ||   /* check for reasonable sizes */
00045        nynew < 1 || jjbot >= jjtop   ){ /* and ranges of dataset     */
00046 
00047       fprintf(stderr,"*** mri_zeropad: can't cut image down to nothing!\n") ;
00048       RETURN(NULL) ;
00049    }
00050 
00051    vim = mri_new( nxnew , nynew , fim->kind ) ;
00052    MRI_COPY_AUX(vim,fim) ;
00053    memset( mri_data_pointer(vim) , 0 ,
00054            nxnew*nynew*mri_datum_size(vim->kind) ) ;
00055 
00056    /* macros for computing 1D subscripts from 2D indices */
00057 
00058 #undef  SNEW  /* in case was defined in some stupid .h file */
00059 #undef  SOLD
00060 #define SNEW(i,j) ((i+nxbot)+(j+nybot)*nxnew)
00061 #define SOLD(i,j) (i+j*nxold)
00062 
00063    switch( fim->kind ){  /* copy rows of old into new */
00064 
00065       default:
00066          fprintf(stderr,"*** mri_zeropad: unknown input datum=%d\n",fim->kind) ;
00067          mri_free(vim) ;
00068       RETURN(NULL) ;
00069 
00070       case MRI_byte:{
00071          byte * bnew = MRI_BYTE_PTR(vim), * bold = MRI_BYTE_PTR(fim) ;
00072          for( jj=jjbot ; jj < jjtop ; jj++ )
00073             for( ii=iibot ; ii < iitop ; ii++ )
00074                bnew[SNEW(ii,jj)] = bold[SOLD(ii,jj)] ;
00075       }
00076       break ;
00077 
00078       case MRI_rgb:{
00079          byte * bnew = MRI_RGB_PTR(vim), * bold = MRI_RGB_PTR(fim) ;
00080          for( jj=jjbot ; jj < jjtop ; jj++ )
00081             for( ii=iibot ; ii < iitop ; ii++ ){
00082                bnew[3*SNEW(ii,jj)  ] = bold[3*SOLD(ii,jj)  ] ;
00083                bnew[3*SNEW(ii,jj)+1] = bold[3*SOLD(ii,jj)+1] ;
00084                bnew[3*SNEW(ii,jj)+2] = bold[3*SOLD(ii,jj)+2] ;
00085             }
00086       }
00087       break ;
00088 
00089       case MRI_short:{
00090          short * bnew = MRI_SHORT_PTR(vim), * bold = MRI_SHORT_PTR(fim) ;
00091          for( jj=jjbot ; jj < jjtop ; jj++ )
00092             for( ii=iibot ; ii < iitop ; ii++ )
00093                bnew[SNEW(ii,jj)] = bold[SOLD(ii,jj)] ;
00094       }
00095       break ;
00096 
00097       case MRI_int:{
00098          int * bnew = MRI_INT_PTR(vim), * bold = MRI_INT_PTR(fim) ;
00099          for( jj=jjbot ; jj < jjtop ; jj++ )
00100             for( ii=iibot ; ii < iitop ; ii++ )
00101                bnew[SNEW(ii,jj)] = bold[SOLD(ii,jj)] ;
00102       }
00103       break ;
00104 
00105       case MRI_float:{
00106          float * bnew = MRI_FLOAT_PTR(vim), * bold = MRI_FLOAT_PTR(fim) ;
00107          for( jj=jjbot ; jj < jjtop ; jj++ )
00108             for( ii=iibot ; ii < iitop ; ii++ )
00109                bnew[SNEW(ii,jj)] = bold[SOLD(ii,jj)] ;
00110       }
00111       break ;
00112 
00113       case MRI_double:{
00114          double * bnew = MRI_DOUBLE_PTR(vim), * bold = MRI_DOUBLE_PTR(fim) ;
00115          for( jj=jjbot ; jj < jjtop ; jj++ )
00116             for( ii=iibot ; ii < iitop ; ii++ )
00117                bnew[SNEW(ii,jj)] = bold[SOLD(ii,jj)] ;
00118       }
00119       break ;
00120 
00121       case MRI_complex:{
00122          complex * bnew = MRI_COMPLEX_PTR(vim), * bold = MRI_COMPLEX_PTR(fim) ;
00123          for( jj=jjbot ; jj < jjtop ; jj++ )
00124             for( ii=iibot ; ii < iitop ; ii++ )
00125                bnew[SNEW(ii,jj)] = bold[SOLD(ii,jj)] ;
00126       }
00127       break ;
00128 
00129    } /* end of switch on datum type */
00130 
00131    RETURN(vim) ;
00132 }
 | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  