X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmPixelReadConvert.cxx;h=9b97cbb171e525e98fc0ea176a36a55d2e208ddc;hb=fbd2698cb0545343abc2d8aefe92bab1f5b3eaa3;hp=da84491d2de7e0aa883111dd5c0636ff0549a5ff;hpb=01b208915f615c468791c373df14b5828f6c6853;p=gdcm.git diff --git a/src/gdcmPixelReadConvert.cxx b/src/gdcmPixelReadConvert.cxx index da84491d..9b97cbb1 100644 --- a/src/gdcmPixelReadConvert.cxx +++ b/src/gdcmPixelReadConvert.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmPixelReadConvert.cxx,v $ Language: C++ - Date: $Date: 2005/06/22 08:04:34 $ - Version: $Revision: 1.71 $ + Date: $Date: 2005/07/01 11:25:51 $ + Version: $Revision: 1.74 $ 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,8 @@ PixelReadConvert::PixelReadConvert() LutRedData = 0; LutGreenData = 0; LutBlueData = 0; + RLEInfo = 0; + JPEGInfo = 0; } /// Canonical Destructor @@ -914,6 +916,7 @@ void PixelReadConvert::ConvertFixGreyLevels() */ bool PixelReadConvert::ConvertReArrangeBits() throw ( FormatError ) { + if ( BitsStored != BitsAllocated ) { int l = (int)( RawSize / ( BitsAllocated / 8 ) ); @@ -925,30 +928,42 @@ 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 ); +/* +std::cout << "BitsStored " << BitsStored + << " BitsAllocated " << BitsAllocated + << std::endl; +std::cout << std::hex << "pmask " << pmask + << " smask " << smask + << " nmask " << nmask + << std::endl; +*/ for(int i = 0; i> (BitsStored - HighBitPosition - 1); if ( *deb & smask ) + { *deb = *deb | nmask; + } else + { *deb = *deb & pmask; + } deb++; } } @@ -972,11 +987,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