# CreateCMYKImage.cxx

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

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

      Copyright (c) 2006-2009 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.

    =========================================================================*/
    /*
     * http://www.w3.org/Graphics/PNG/inline-alpha.html
     * alphatest.png: PNG image data, 380 x 287, 8-bit/color RGBA, non-interlaced
     *
     * $ convert alphatest.png alphatest.cmyk
     */

    #include "gdcmImageReader.h"
    #include "gdcmSequenceOfFragments.h"
    #include "gdcmSystem.h"
    #include "gdcmImageWriter.h"

    #include <iostream>
    #include <fstream>

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

          size_t len = gdcm::System::FileSize(filename);
          std::ifstream is(filename);

          char * buf = new char[len];
          is.read(buf, len);

      gdcm::ImageWriter writer;
      gdcm::Image &image = writer.GetImage();
      image.SetNumberOfDimensions( 2 );
      unsigned int dims[3] = {};
      dims[0] = 380;
      dims[1] = 287;
      image.SetDimensions( dims );
      gdcm::PixelFormat pf = gdcm::PixelFormat::UINT8;
      pf.SetSamplesPerPixel( 4 );
      image.SetPixelFormat( pf );
      gdcm::PhotometricInterpretation pi = gdcm::PhotometricInterpretation::CMYK;
      image.SetPhotometricInterpretation( pi );
      image.SetTransferSyntax( gdcm::TransferSyntax::ExplicitVRLittleEndian );

          gdcm::DataElement pixeldata( gdcm::Tag(0x7fe0,0x0010) );
          pixeldata.SetByteValue( buf, len );
          image.SetDataElement( pixeldata );

          writer.SetFileName( outfilename );
          if( !writer.Write() )
            {
            return 1;
            }
          delete[] buf;

      return 0;
    }