+ // Deal with the pb of (Bits Stored = 12)
+ // - we're gonna write the image as Bits Stored = 16
+ if ( FileInternal->GetEntryValue(0x0028,0x0100) == "12")
+ {
+ ValEntry *e_0028_0100 = CopyValEntry(0x0028,0x0100);
+ e_0028_0100->SetValue("16");
+ Archive->Push(e_0028_0100);
+ }
+
+ // Check if user wasn't drunk ;-)
+
+ std::ostringstream s;
+ // check 'Bits Allocated' vs decent values
+ int nbBitsAllocated = FileInternal->GetBitsAllocated();
+ if ( nbBitsAllocated == 0 || nbBitsAllocated > 32)
+ {
+ ValEntry *e_0028_0100 = CopyValEntry(0x0028,0x0100);
+ e_0028_0100->SetValue("16");
+ Archive->Push(e_0028_0100);
+ gdcmWarningMacro("(0028,0100) changed from "
+ << nbBitsAllocated << " to 16 for consistency purpose");
+ nbBitsAllocated = 16;
+ }
+ // check 'Bits Stored' vs 'Bits Allocated'
+ int nbBitsStored = FileInternal->GetBitsStored();
+ if ( nbBitsStored == 0 || nbBitsStored > nbBitsAllocated )
+ {
+ s << nbBitsAllocated;
+ ValEntry *e_0028_0101 = CopyValEntry(0x0028,0x0101);
+ e_0028_0101->SetValue( s.str() );
+ Archive->Push(e_0028_0101);
+ gdcmWarningMacro("(0028,0101) changed from "
+ << nbBitsStored << " to " << nbBitsAllocated
+ << " for consistency purpose" );
+ nbBitsStored = nbBitsAllocated;
+ }
+ // check 'Hight Bit Position' vs 'Bits Allocated' and 'Bits Stored'
+ int highBitPosition = FileInternal->GetHighBitPosition();
+ if ( highBitPosition == 0 ||
+ highBitPosition > nbBitsAllocated-1 ||
+ highBitPosition < nbBitsStored-1 )
+ {
+ ValEntry *e_0028_0102 = CopyValEntry(0x0028,0x0102);
+
+ s << nbBitsStored - 1;
+ e_0028_0102->SetValue( s.str() );
+ Archive->Push(e_0028_0102);
+ gdcmWarningMacro("(0028,0102) changed from "
+ << highBitPosition << " to " << nbBitsAllocated-1
+ << " for consistency purpose");
+ }
+ // --- Check UID-related Entries ---