# MagnifyFile.cxx

    /*=========================================================================

      Program: GDCM (Grassroots DICOM). A DICOM library
      Module:  $URL$

      Copyright (c) 2006-2010 Mathieu Malaterre
      All rights reserved.
      See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.

         This software is distributed WITHOUT ANY WARRANTY; without even
         the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
         PURPOSE.  See the above copyright notice for more information.

    =========================================================================*/
    #include "vtkGDCMImageReader.h"
    #include "vtkGDCMImageWriter.h"
    #include "vtkImageData.h"
    #include "vtkImageMagnify.h"
    #include "vtkImageCast.h"

    #include "gdcmTesting.h"
    #include "gdcmSystem.h"

    // This is a simple test to magnify an image that is known to give excellent
    // compression ratio. This will be our test for those large image
    int main(int, char *[])
    {
      const char *directory = gdcm::Testing::GetDataRoot();
      if(!directory) return 1;
      std::string file = std::string(directory) + "/test.acr";
      std::cout << file << std::endl;
      if( !gdcm::System::FileExists( file.c_str() ) ) return 1;

      vtkGDCMImageReader *reader = vtkGDCMImageReader::New();
      reader->SetFileName( file.c_str() );
      reader->Update();
      //reader->GetOutput()->Print( std::cout );

      vtkImageCast *cast = vtkImageCast::New();
      cast->SetInput( reader->GetOutput() );
      cast->SetOutputScalarTypeToUnsignedShort();

      vtkImageMagnify *magnify = vtkImageMagnify::New();
      magnify->SetInput( cast->GetOutput() );
      magnify->SetInterpolate( 1 );
      magnify->SetInterpolate( 0 );
      int factor = 100;
      magnify->SetMagnificationFactors (factor, factor, 1);

      vtkGDCMImageWriter *writer = vtkGDCMImageWriter::New();
      writer->SetFileName( "/tmp/bla.dcm" );
      writer->SetInput( magnify->GetOutput() );
      writer->SetImageFormat( reader->GetImageFormat() );
      writer->SetMedicalImageProperties( reader->GetMedicalImageProperties() );
      writer->SetDirectionCosines( reader->GetDirectionCosines() );
      writer->SetShift( reader->GetShift() );
      writer->SetScale( reader->GetScale() );
      writer->Write();

      // TODO:
      //vtkImageAppendComponents.h

      reader->Delete();
      magnify->Delete();
      writer->Delete();

      return 0;
    }