/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "mrilib.h"
/** Only for 2D images **/
MRI_IMAGE * mri_transpose_float( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
float * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_float") ;
if( im == NULL || im->kind != MRI_float ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_float ) ;
iar = MRI_FLOAT_PTR(im) ;
oar = MRI_FLOAT_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose_double( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
double * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_double") ;
if( im == NULL || im->kind != MRI_double ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_double ) ;
iar = MRI_DOUBLE_PTR(im) ;
oar = MRI_DOUBLE_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose_short( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
short * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_short") ;
if( im == NULL || im->kind != MRI_short ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_short ) ;
iar = MRI_SHORT_PTR(im) ;
oar = MRI_SHORT_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose_byte( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
byte * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_byte") ;
if( im == NULL || im->kind != MRI_byte ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_byte ) ;
iar = MRI_BYTE_PTR(im) ;
oar = MRI_BYTE_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose_int( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
int * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_int") ;
if( im == NULL || im->kind != MRI_int ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_int ) ;
iar = MRI_INT_PTR(im) ;
oar = MRI_INT_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose_complex( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
complex * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_complex") ;
if( im == NULL || im->kind != MRI_complex ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_complex ) ;
iar = MRI_COMPLEX_PTR(im) ;
oar = MRI_COMPLEX_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose_rgbyte( MRI_IMAGE * im )
{
MRI_IMAGE * om ;
rgbyte * iar , * oar ;
int ii,jj,nx,ny ;
ENTRY("mri_transpose_rgbyte") ;
if( im == NULL || im->kind != MRI_rgb ) RETURN(NULL) ;
nx = im->nx ; ny = im->ny ;
om = mri_new( ny , nx , MRI_rgb ) ;
iar = (rgbyte *) MRI_RGB_PTR(im) ;
oar = (rgbyte *) MRI_RGB_PTR(om) ;
for( jj=0 ; jj < ny ; jj++ )
for( ii=0 ; ii < nx ; ii++ )
oar[jj+ii*ny] = iar[ii+jj*nx] ;
MRI_COPY_AUX(om,im) ;
RETURN(om) ;
}
MRI_IMAGE * mri_transpose( MRI_IMAGE * im )
{
if( im == NULL ) return NULL ;
switch( im->kind ){
case MRI_float : return mri_transpose_float (im) ;
case MRI_short : return mri_transpose_short (im) ;
case MRI_byte : return mri_transpose_byte (im) ;
case MRI_int : return mri_transpose_int (im) ;
case MRI_complex: return mri_transpose_complex(im) ;
case MRI_rgb: return mri_transpose_rgbyte (im) ;
case MRI_double: return mri_transpose_double (im) ;
default: fprintf(stderr,"Cannot transpose type %d.\n", im->kind);
}
return NULL ;
}
syntax highlighted by Code2HTML, v. 0.9.1