+ for(int i = 0; i<l; i++)
+ {
+ *deb = (*deb >> (BitsStored - HighBitPosition - 1)) & pmask;
+ deb++;
+ }
+ }
+ else // Pixels are signed
+ {
+ // smask : to check the 'sign' when BitsStored != BitsAllocated
+ uint16_t smask = 0x0001;
+ smask = smask << ( 16 - (BitsAllocated - BitsStored + 1) );
+ // nmask : to propagate sign bit on negative values
+ 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<l; i++)
+ {
+ *deb = *deb >> (BitsStored - HighBitPosition - 1);
+ if ( *deb & smask )
+ {
+ *deb = *deb | nmask;
+ }
+ else
+ {
+ *deb = *deb & pmask;
+ }
+ deb++;
+ }