1 /*=========================================================================
4 Module: $RCSfile: gdcmJPEGFragment.cxx,v $
6 Date: $Date: 2008/01/02 10:48:52 $
7 Version: $Revision: 1.20 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
19 #include "gdcmJPEGFragment.h"
20 #include "gdcmDebug.h"
22 namespace GDCM_NAME_SPACE
24 //-------------------------------------------------------------------------
25 // For JPEG 2000, body in file gdcmJpeg2000.cxx
27 bool gdcm_read_JPEG2000_file (std::ifstream *fp, void *image_buffer);
29 // For JPEG-LS, body in file gdcmJpegLS.cxx
31 bool gdcm_read_JPEGLS_file (std::ifstream *fp, void *image_buffer);
33 //-------------------------------------------------------------------------
34 // Constructor / Destructor
36 * \brief Default constructor.
38 JPEGFragment::JPEGFragment()
47 //-----------------------------------------------------------------------------
50 * \brief Decompress 8bits JPEG Fragment
51 * @param fp ifstream to write to
52 * @param buffer output (data decompress)
53 * @param nBits 8/12 or 16 bits jpeg
54 * @param statesuspension state suspension
56 void JPEGFragment::DecompressJPEGFramesFromFile(std::ifstream *fp,
57 uint8_t *buffer, int nBits,
60 // First thing need to reset file to proper position:
61 fp->seekg( Offset, std::ios::beg);
65 // JPEG Lossy : call to IJG 6b - 8 bits
66 ReadJPEGFile8( fp, buffer, statesuspension);
68 else if ( nBits <= 12 )
71 // JPEG Lossy : call to IJG 6b - 12 bits
72 ReadJPEGFile12 ( fp, buffer, statesuspension);
74 else if ( nBits <= 16 )
76 assert( nBits >= 12 );
77 // JPEG Lossy : call to IJG 6b - 16 bits
78 ReadJPEGFile16 ( fp, buffer, statesuspension);
79 //gdcmAssertMacro( IsJPEGLossless );
83 // FIXME : only the bits number is checked,
84 // NOT the compression method
86 // other JPEG lossy not supported
87 gdcmErrorMacro( "Unknown jpeg lossy compression ");
91 //-----------------------------------------------------------------------------
94 //-----------------------------------------------------------------------------
97 //-----------------------------------------------------------------------------
101 * @param os Stream to print to.
102 * @param indent Indentation string to be prepended during printing.
104 void JPEGFragment::Print( std::ostream &os, std::string const &indent )
107 << "JPEG fragment: offset : " << std::dec << Offset
108 << " 0x(" << std::hex << Offset << ") "
109 << std::dec << " length : " << Length
110 << " 0x(" << std::hex << Length << ") "
114 //-----------------------------------------------------------------------------
115 } // end namespace gdcm