# DecompressPixmap.java

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

      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.

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

    /*
     * This example will take in a DICOM file, and tries to decompress it (actually write it
     * as ImplicitVRLittleEndian Transfer Syntax).
     *
     * Compilation:
     * $ CLASSPATH=gdcm.jar javac -source 1.5 ../../trunk/Examples/Java/DecompressPixmap.java -d .
     *
     * Usage:
     * $ LD_LIBRARY_PATH=. CLASSPATH=gdcm.jar:. java DecompressPixmap ~/Creatis/gdcmData/012345.002.050.dcm  out.dcm
     */
    import gdcm.*;

    public class DecompressPixmap
    {
      public static void main(String[] args) throws Exception
        {
        String file1 = args[0];
        String file2 = args[1];
        //PixmapReader reader = new PixmapReader();
        ImageReader reader = new ImageReader();
        reader.SetFileName( file1 );
        boolean ret = reader.Read();
        if( !ret )
          {
          throw new Exception("Could not read: " + file1 );
          }

        ImageChangeTransferSyntax change = new ImageChangeTransferSyntax();
        change.SetTransferSyntax( new TransferSyntax(TransferSyntax.TSType.ImplicitVRLittleEndian) );
        change.SetInput( reader.GetPixmap() );
        if( !change.Change() )
          {
          throw new Exception("Could not change: " + file1 );
          }

        // When using a PixmapReader the following code crashes, I do not understand why (MM)
        // Instead hack our way in, and use an ImageReader instead of a PixmapReader
        //
        // Hum looks like Java Covariant Return type is not working for some reason
        Pixmap out = ((PixmapToPixmapFilter)change).GetOutput();
        System.out.println( out.toString() );

        // Set the Source Application Entity Title
        FileMetaInformation.SetSourceApplicationEntityTitle( "Just For Fun" );

        PixmapWriter writer = new PixmapWriter();
        writer.SetFileName( file2 );
        writer.SetFile( reader.GetFile() );
        writer.SetImage( out );
        ret = writer.Write();
        if( !ret )
          {
          throw new Exception("Could not write: " + file2 );
          }

        }
    }