# HelloVizWorld.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.

    =========================================================================*/
    /*
     * Basic example for dealing with a DICOM file that contains an Image
     * (read: Pixel Data element)
     */

    #include "gdcmImageReader.h"
    #include "gdcmImageWriter.h"
    #include "gdcmImage.h"
    #include "gdcmPhotometricInterpretation.h"

    #include <iostream>

    int main(int argc, char *argv[])
    {
      if( argc < 3 )
        {
        std::cerr << argv[0] << " input.dcm output.dcm" << std::endl;
        return 1;
        }
      const char *filename = argv[1];
      const char *outfilename = argv[2];

      // Instanciate the image reader:
      gdcm::ImageReader reader;
      reader.SetFileName( filename );
      if( !reader.Read() )
        {
        std::cerr << "Could not read: " << filename << std::endl;
        return 1;
        }
      // If we reach here, we know for sure 2 things:
      // 1. It is a valid DICOM
      // 2. And it contains an Image !

      // The output of superclass gdcm::Reader is a gdcm::File
      gdcm::File &file = reader.GetFile();

      // The other output of gdcm::ImageReader is a gdcm::Image
      const gdcm::Image &image = reader.GetImage();

      // Let's get some property from the image:
      unsigned int ndim = image.GetNumberOfDimensions();
      // Dimensions of the image:
      const unsigned int *dims = image.GetDimensions();
      // Origin
      const double *origin = image.GetOrigin();
      const gdcm::PhotometricInterpretation &pi = image.GetPhotometricInterpretation();
      for(unsigned int i = 0; i < ndim; ++i)
        {
        std::cout << "Dim(" << i << "): " << dims[i] << std::endl;
        }
      for(unsigned int i = 0; i < ndim; ++i)
        {
        std::cout << "Origin(" << i << "): " << origin[i] << std::endl;
        }
      std::cout << "PhotometricInterpretation: " << pi << std::endl;

      // Write the modified DataSet back to disk
      gdcm::ImageWriter writer;
      writer.SetImage( image );
      writer.SetFileName( outfilename );
      //writer.SetFile( file ); // We purposely NOT copy the meta information from the input
                                // file, and instead only pass the image
      if( !writer.Write() )
        {
        std::cerr << "Could not write: " << outfilename << std::endl;
        return 1;
        }

      return 0;
    }