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 }