-
- // Deduce from both the RLE Header and the frameLength the
- // fragment length, and again store this info in a
- // RLEFramesInfo.
- long rleSegmentLength[15];
- // skipping (not reading) RLE Segments
- if ( nbRleSegments > 1)
- {
- for(unsigned int k = 1; k <= nbRleSegments-1; k++)
- {
- rleSegmentLength[k] = rleSegmentOffsetTable[k+1]
- - rleSegmentOffsetTable[k];
- SkipBytes(rleSegmentLength[k]);
- }
- }
-
- rleSegmentLength[nbRleSegments] = frameLength
- - rleSegmentOffsetTable[nbRleSegments];
- SkipBytes(rleSegmentLength[nbRleSegments]);
-
- // Store the collected info
- RLEFrame *newFrameInfo = new RLEFrame;
- newFrameInfo->NumberFragments = nbRleSegments;
- for( unsigned int uk = 1; uk <= nbRleSegments; uk++ )
- {
- newFrameInfo->Offset[uk] = frameOffset + rleSegmentOffsetTable[uk];
- newFrameInfo->Length[uk] = rleSegmentLength[uk];
- }
- RLEInfo->Frames.push_back( newFrameInfo );
- }
-
- // Make sure that at the end of the item we encounter a 'Sequence
- // Delimiter Item':
- if ( !ReadTag(0xfffe, 0xe0dd) )
- {
- gdcmVerboseMacro( "No sequence delimiter item at end of RLE item sequence");
- }
-}
-
-/**
- * \brief Parse pixel data from disk of [multi-]fragment Jpeg encoding.
- * Compute the jpeg extra information (fragment[s] offset[s] and
- * length) and store it[them] in \ref JPEGInfo for later pixel
- * retrieval usage.
- */
-void Document::ComputeJPEGFragmentInfo()
-{
- // If you need to, look for comments of ComputeRLEInfo().
- std::string ts = GetTransferSyntax();
- if ( ! Global::GetTS()->IsJPEG(ts) )
- {
- return;
- }
-
- ReadAndSkipEncapsulatedBasicOffsetTable();
-
- // Loop on the fragments[s] and store the parsed information in a
- // JPEGInfo.
- long fragmentLength;
- while ( (fragmentLength = ReadTagLength(0xfffe, 0xe000)) )
- {
- long fragmentOffset = Fp->tellg();
-
- // Store the collected info
- JPEGFragment *newFragment = new JPEGFragment;
- newFragment->Offset = fragmentOffset;
- newFragment->Length = fragmentLength;
- JPEGInfo->Fragments.push_back( newFragment );
-
- SkipBytes( fragmentLength );
- }
-
- // Make sure that at the end of the item we encounter a 'Sequence
- // Delimiter Item':
- if ( !ReadTag(0xfffe, 0xe0dd) )
- {
- gdcmVerboseMacro( "No sequence delimiter item at end of JPEG item sequence");
- }
-}
-
-/**
- * \brief Walk recursively the given \ref DocEntrySet, and feed
- * the given hash table (\ref TagDocEntryHT) with all the
- * \ref DocEntry (Dicom entries) encountered.
- * This method does the job for \ref BuildFlatHashTable.
- * @param builtHT Where to collect all the \ref DocEntry encountered
- * when recursively walking the given set.
- * @param set The structure to be traversed (recursively).
- */
-void Document::BuildFlatHashTableRecurse( TagDocEntryHT &builtHT,
- DocEntrySet *set )
-{
- if (ElementSet *elementSet = dynamic_cast< ElementSet* > ( set ) )
- {
- TagDocEntryHT const ¤tHT = elementSet->GetTagHT();
- for( TagDocEntryHT::const_iterator i = currentHT.begin();
- i != currentHT.end();
- ++i)
+
+ // FIXME Strangely, this works with
+ //'Implicit VR BigEndian Transfer Syntax' (GE Private)
+ //
+ // --> Probabely normal, since we considered we never have
+ // to trust manufacturers.
+ // (we often find 'Implicit VR' tag,
+ // even when Transfer Syntax tells us it's Explicit ...
+
+ // NEVER trust the meta elements!
+ // (see what ezDICOM does ...)
+
+ /*
+ if ( s == TS::ExplicitVRBigEndian )