/*========================================================================= Program: GDCM (Grassroots DICOM). A DICOM library Copyright (c) 2006-2011 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 #include 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, std::ios::binary); 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, (uint32_t)len ); image.SetDataElement( pixeldata ); writer.SetFileName( outfilename ); if( !writer.Write() ) { return 1; } delete[] buf; return 0; }