#include <iostream>
int main( int argc, char * argv[] )
{
if( argc != 5 )
{
std::cerr << "Usage: "
<< std::endl
<< argv[0]
<< " inputImageFile outputImageFile nNewWidth nNewHeight"
<< std::endl;
return EXIT_FAILURE;
}
typedef unsigned char T_InputPixel;
typedef unsigned char T_WritePixel;
T_Transform;
T_Interpolator;
T_ResampleFilter;
T_Reader::Pointer pReader = T_Reader::New();
pReader->SetFileName( argv[1] );
pReader->Update();
T_Transform::Pointer _pTransform = T_Transform::New();
_pTransform->SetIdentity();
T_Interpolator::Pointer _pInterpolator = T_Interpolator::New();
_pInterpolator->SetSplineOrder(3);
T_ResampleFilter::Pointer _pResizeFilter = T_ResampleFilter::New();
_pResizeFilter->SetTransform(_pTransform);
_pResizeFilter->SetInterpolator(_pInterpolator);
const double vfOutputOrigin[2] = { 0.0, 0.0 };
_pResizeFilter->SetOutputOrigin(vfOutputOrigin);
unsigned int nNewWidth = atoi(argv[3]);
unsigned int nNewHeight = atoi(argv[4]);
const T_Image::RegionType& inputRegion =
pReader->GetOutput()->GetLargestPossibleRegion();
const T_Image::SizeType& vnInputSize = inputRegion.GetSize();
unsigned int nOldWidth = vnInputSize[0];
unsigned int nOldHeight = vnInputSize[1];
const T_Image::SpacingType& vfInputSpacing =
pReader->GetOutput()->GetSpacing();
double vfOutputSpacing[2];
vfOutputSpacing[0] = vfInputSpacing[0] * (double) nOldWidth / (double) nNewWidth;
vfOutputSpacing[1] = vfInputSpacing[1] * (double) nOldHeight / (double) nNewHeight;
_pResizeFilter->SetOutputSpacing(vfOutputSpacing);
_pResizeFilter->
SetSize(vnOutputSize);
_pResizeFilter->SetInput(pReader->GetOutput());
T_Writer::Pointer pWriter = T_Writer::New();
pWriter->SetFileName(argv[2]);
pWriter->SetInput(_pResizeFilter->GetOutput());
pWriter->Update();
return EXIT_SUCCESS;
}