X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmPixelReadConvert.cxx;h=3e4a1e346c8b0db4cc26618b18ec9bc0e4759363;hb=92fe82e2bc99ea08ec0a2668e629123e8dd011ca;hp=da84491d2de7e0aa883111dd5c0636ff0549a5ff;hpb=01b208915f615c468791c373df14b5828f6c6853;p=gdcm.git diff --git a/src/gdcmPixelReadConvert.cxx b/src/gdcmPixelReadConvert.cxx index da84491d..3e4a1e34 100644 --- a/src/gdcmPixelReadConvert.cxx +++ b/src/gdcmPixelReadConvert.cxx @@ -1,10 +1,10 @@ /*========================================================================= - + Program: gdcm Module: $RCSfile: gdcmPixelReadConvert.cxx,v $ Language: C++ - Date: $Date: 2005/06/22 08:04:34 $ - Version: $Revision: 1.71 $ + Date: $Date: 2005/09/07 14:12:23 $ + Version: $Revision: 1.77 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -50,6 +50,10 @@ PixelReadConvert::PixelReadConvert() LutRedData = 0; LutGreenData = 0; LutBlueData = 0; + RLEInfo = 0; + JPEGInfo = 0; + UserFunction = 0; + FileInternal = 0; } /// Canonical Destructor @@ -107,7 +111,7 @@ void PixelReadConvert::GrabInformationsFromFile( File *file ) YSize = file->GetYSize(); ZSize = file->GetZSize(); SamplesPerPixel = file->GetSamplesPerPixel(); - PixelSize = file->GetPixelSize(); + //PixelSize = file->GetPixelSize(); Useless PixelSign = file->IsSignedPixelData(); SwapCode = file->GetSwapCode(); std::string ts = file->GetTransferSyntax(); @@ -186,6 +190,7 @@ void PixelReadConvert::GrabInformationsFromFile( File *file ) gdcmWarningMacro( "Unable to read Blue Palette Color Lookup Table data" ); } } + FileInternal = file; ComputeRawAndRGBSizes(); } @@ -259,7 +264,8 @@ bool PixelReadConvert::ReadAndDecompressPixelData( std::ifstream *fp ) { //gdcmWarningMacro( "Sorry, MPEG not yet taken into account" ); //return false; - //ReadMPEGFile(fp, Raw, PixelDataLength); // fp has already been seek to start of mpeg + // fp has already been seek to start of mpeg + //ReadMPEGFile(fp, Raw, PixelDataLength); return true; } else @@ -277,6 +283,8 @@ bool PixelReadConvert::ReadAndDecompressPixelData( std::ifstream *fp ) ConvertReorderEndianity(); ConvertReArrangeBits(); ConvertFixGreyLevels(); + if (UserFunction) // user is allowed to Mirror, TopDown, Rotate,...the image + UserFunction( Raw, FileInternal); ConvertHandleColor(); return true; @@ -914,6 +922,7 @@ void PixelReadConvert::ConvertFixGreyLevels() */ bool PixelReadConvert::ConvertReArrangeBits() throw ( FormatError ) { + if ( BitsStored != BitsAllocated ) { int l = (int)( RawSize / ( BitsAllocated / 8 ) ); @@ -925,30 +934,34 @@ bool PixelReadConvert::ConvertReArrangeBits() throw ( FormatError ) uint16_t *deb = (uint16_t*)Raw; - if ( !PixelSign ) + if ( !PixelSign ) // Pixels are unsigned { for(int i = 0; i> (BitsStored - HighBitPosition - 1)) & pmask; deb++; } } - else + else // Pixels are signed { // smask : to check the 'sign' when BitsStored != BitsAllocated - uint16_t smask = 0x8000; - smask = smask >> ( BitsAllocated - BitsStored ); + uint16_t smask = 0x0001; + smask = smask << ( 16 - (BitsAllocated - BitsStored + 1) ); // nmask : to propagate sign bit on negative values - int16_t nmask = 0x8000; - nmask = nmask >> ( BitsAllocated - BitsStored ); - + int16_t nmask = (int16_t)0x8000; + nmask = nmask >> ( BitsAllocated - BitsStored - 1 ); + for(int i = 0; i> (BitsStored - HighBitPosition - 1); if ( *deb & smask ) + { *deb = *deb | nmask; + } else + { *deb = *deb & pmask; + } deb++; } } @@ -972,11 +985,11 @@ bool PixelReadConvert::ConvertReArrangeBits() throw ( FormatError ) else { // smask : to check the 'sign' when BitsStored != BitsAllocated - uint32_t smask = 0x80000000; - smask = smask >> ( BitsAllocated - BitsStored ); + uint32_t smask = 0x00000001; + smask = smask >> ( 32 - (BitsAllocated - BitsStored +1 )); // nmask : to propagate sign bit on negative values int32_t nmask = 0x80000000; - nmask = nmask >> ( BitsAllocated - BitsStored ); + nmask = nmask >> ( BitsAllocated - BitsStored -1 ); for(int i = 0; i GetImageData -// ---> GetImageDataIntoVector -// |---> GetImageDataIntoVectorRaw -// | lut intervention -// User -// ---> GetImageDataRaw -// ---> GetImageDataIntoVectorRaw -