Program: gdcm
Module: $RCSfile: gdcmDocument.cxx,v $
Language: C++
- Date: $Date: 2006/05/05 22:13:55 $
- Version: $Revision: 1.347 $
+ Date: $Date: 2006/06/15 14:22:33 $
+ Version: $Revision: 1.350 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
return DoTheLoadingDocumentJob( );
}
-#ifndef GDCM_LEGACY_REMOVE
+
+//#ifndef GDCM_LEGACY_REMOVE
/**
* \brief Loader. (DEPRECATED : not to break the API)
* @param fileName 'Document' (File or DicomDir) to be open for parsing
* @return false if file cannot be open or no swap info was found,
* or no tag was found.
*/
+ /*
bool Document::Load( std::string const &fileName )
{
Filename = fileName;
return DoTheLoadingDocumentJob( );
}
-#endif
+*/
+//#endif
/**
* \brief Performs the Loading Job (internal use only)
LoadDocEntry(d, true);
}
- CloseFile();
+ CloseFile();
// ----------------------------
// Specific code to allow gdcm to read ACR-LibIDO formated images
}
//-- Broken ACR or DICOM with no Preamble; may start with a Shadow Group --
-
// FIXME : We cannot be sure the preable is only zeroes..
// (see ACUSON-24-YBR_FULL-RLE.dcm )
if (
DocEntry *newDocEntry;
DataEntry *newDataEntry;
SeqEntry *newSeqEntry;
- VRKey vr;
+ //VRKey vr;
bool used; // will be set to false when something wrong happens to an Entry.
// (Entry will then be deleted)
bool delim_mode_intern = delim_mode;
if( Debug::GetDebugFlag() )
std::cout << std::dec <<"(long)(Fp->tellg()) " << (long)(Fp->tellg()) // in Debug mode
<< std::hex << " 0x(" <<(long)(Fp->tellg()) << ")" << std::endl;
-*/
+ */
// if ( !delim_mode && ((long)(Fp->tellg())-offset) >= l_max) // Once per DocEntry
if ( !delim_mode ) // 'and then' doesn't exist in C++ :-(
{
break;
}
- newDocEntry = ReadNextDocEntry( );
- // Uncoment this cerr line to be able to 'follow' the DocEntries
- // when something *very* strange happens
- if( Debug::GetDebugFlag() )
- std::cerr<<newDocEntry->GetKey()<<" "<<newDocEntry->GetVR()<<std::endl;
+ newDocEntry = ReadNextDocEntry( );
if ( !newDocEntry )
{
break;
}
+
+ // Uncoment this cerr line to be able to 'follow' the DocEntries
+ // when something *very* strange happens
+ if( Debug::GetDebugFlag() )
+ std::cerr<<newDocEntry->GetKey()<<" "<<newDocEntry->GetVR()<<std::endl;
- // an Item Starter found elsewhere but the first position
+ // an Item Starter found elsewhere but in the first position
// of a SeqEntry means previous entry was a Sequence
// but we didn't get it (private Sequence + Implicit VR)
// we have to backtrack.
{
//////////////////////////// DataEntry
- vr = newDocEntry->GetVR();
+ //vr = newDocEntry->GetVR(); // useless ?
if ( !set->AddEntry( newDataEntry ) )
{
*/
void Document::LoadDocEntry(DocEntry *entry, bool forceLoad)
{
- uint16_t group = entry->GetGroup();
- uint16_t elem = entry->GetElement();
+ uint16_t group = entry->GetGroup();
+ uint16_t elem = entry->GetElement();
const VRKey &vr = entry->GetVR();
- uint32_t length = entry->GetLength();
+ uint32_t length = entry->GetLength();
// Fp->seekg((long)entry->GetOffset(), std::ios::beg); // JPRx
// encounter such an ill-formed image, we simply display a warning
// message and proceed on parsing (while crossing fingers).
long filePosition = Fp->tellg(); // Only when elem 0x0000 length is not 4 (?!?)
+ (void)filePosition;
gdcmWarningMacro( "Erroneous Group Length element length on : ("
<< std::hex << group << " , " << elem
<< ") -before- position x(" << filePosition << ")"
// We thought this was explicit VR, but we end up with an
// implicit VR tag. Let's backtrack.
- //if ( newEntry->GetGroup() != 0xfffe )
- if (CurrentGroup != 0xfffe )
+ //if ( newEntry->GetGroup() != 0xfffe )
+ if (CurrentGroup != 0xfffe)
{
int offset = Fp->tellg();//Only when heuristic for Explicit/Implicit was wrong
}
newEntry->SetOffset(Fp->tellg()); // for each DocEntry
-
return newEntry;
}
*/
void Document::HandleBrokenEndian(uint16_t &group, uint16_t &elem)
{
+ // for strange PMS Gyroscan Intera images
+ // Item 'starter' has a tag : 0x3f3f,0x3f00, for no apparent reason
+
+ // --- Feel free to remove this test *on your own coy of gdcm*
+ // if you are sure you'll never face this problem.
+
+ if ((group == 0x3f3f) && (elem == 0x3f00))
+ {
+ // start endian swap mark for group found
+ gdcmDebugMacro( " delimiter 0x3f3f found." );
+ // fix the tag
+ group = 0xfffe;
+ elem = 0xe000;
+ return;
+ }
+ // --- End of removable code
+
// Endian reversion.
// Some files contain groups of tags with reversed endianess.
static int reversedEndian = 0;