X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmJPEGFragment.cxx;h=3a50c996bbceac1474a271afba6cc4c04b95a17d;hb=6278320cc85da00d2d56ffbf07806e84966892c3;hp=0af4944ddecbbc1fe21fd47b4fdf4facb2065f72;hpb=e8caac199c2683cb0f118c42c61dc6aec85b1eec;p=gdcm.git diff --git a/src/gdcmJPEGFragment.cxx b/src/gdcmJPEGFragment.cxx index 0af4944d..3a50c996 100644 --- a/src/gdcmJPEGFragment.cxx +++ b/src/gdcmJPEGFragment.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmJPEGFragment.cxx,v $ Language: C++ - Date: $Date: 2005/01/16 04:50:42 $ - Version: $Revision: 1.2 $ + Date: $Date: 2008/01/02 10:48:52 $ + Version: $Revision: 1.20 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -17,10 +17,21 @@ =========================================================================*/ #include "gdcmJPEGFragment.h" - -namespace gdcm +#include "gdcmDebug.h" + +namespace GDCM_NAME_SPACE { +//------------------------------------------------------------------------- +// For JPEG 2000, body in file gdcmJpeg2000.cxx +// Not yet made +bool gdcm_read_JPEG2000_file (std::ifstream *fp, void *image_buffer); +// For JPEG-LS, body in file gdcmJpegLS.cxx +// Not yet made +bool gdcm_read_JPEGLS_file (std::ifstream *fp, void *image_buffer); + +//------------------------------------------------------------------------- +// Constructor / Destructor /** * \brief Default constructor. */ @@ -28,20 +39,78 @@ JPEGFragment::JPEGFragment() { Offset = 0; Length = 0; + + pImage = 0; + +} + +//----------------------------------------------------------------------------- +// Public +/** + * \brief Decompress 8bits JPEG Fragment + * @param fp ifstream to write to + * @param buffer output (data decompress) + * @param nBits 8/12 or 16 bits jpeg + * @param statesuspension state suspension + */ +void JPEGFragment::DecompressJPEGFramesFromFile(std::ifstream *fp, + uint8_t *buffer, int nBits, + int &statesuspension) +{ + // First thing need to reset file to proper position: + fp->seekg( Offset, std::ios::beg); + + if ( nBits == 8 ) + { + // JPEG Lossy : call to IJG 6b - 8 bits + ReadJPEGFile8( fp, buffer, statesuspension); + } + else if ( nBits <= 12 ) + { + assert( nBits >= 8 ); + // JPEG Lossy : call to IJG 6b - 12 bits + ReadJPEGFile12 ( fp, buffer, statesuspension); + } + else if ( nBits <= 16 ) + { + assert( nBits >= 12 ); + // JPEG Lossy : call to IJG 6b - 16 bits + ReadJPEGFile16 ( fp, buffer, statesuspension); + //gdcmAssertMacro( IsJPEGLossless ); + } + else + { + // FIXME : only the bits number is checked, + // NOT the compression method + + // other JPEG lossy not supported + gdcmErrorMacro( "Unknown jpeg lossy compression "); + } } +//----------------------------------------------------------------------------- +// Protected + +//----------------------------------------------------------------------------- +// Private + +//----------------------------------------------------------------------------- +// Print /** * \brief Print self. - * @param indent Indentation string to be prepended during printing. * @param os Stream to print to. + * @param indent Indentation string to be prepended during printing. */ -void JPEGFragment::Print( std::ostream &os, std::string indent ) +void JPEGFragment::Print( std::ostream &os, std::string const &indent ) { os << indent - << "JPEG fragment: offset : " << Offset - << " length : " << Length + << "JPEG fragment: offset : " << std::dec << Offset + << " 0x(" << std::hex << Offset << ") " + << std::dec << " length : " << Length + << " 0x(" << std::hex << Length << ") " << std::endl; } +//----------------------------------------------------------------------------- } // end namespace gdcm