X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=src%2FgdcmDocument.cxx;h=e8c8ab0d69286a7379fbacd0bdb325fcf69865ec;hb=8b6c2d1b6d9ff41d0b11bced79cf49f3757e8b5c;hp=23766c4ba3576f64d4aeedaa8dd33c229840f8f6;hpb=445c21718f64ec33f183adb37fd40c6c1a882b4a;p=gdcm.git diff --git a/src/gdcmDocument.cxx b/src/gdcmDocument.cxx index 23766c4b..e8c8ab0d 100644 --- a/src/gdcmDocument.cxx +++ b/src/gdcmDocument.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmDocument.cxx,v $ Language: C++ - Date: $Date: 2005/09/16 17:19:26 $ - Version: $Revision: 1.279 $ + Date: $Date: 2005/09/21 16:53:59 $ + Version: $Revision: 1.283 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -648,11 +648,10 @@ bool Document::CloseFile() } /** - * \brief Writes in a file all the Header Entries (Dicom Elements) + * \brief Writes in a file all the Entries (Dicom Elements) * @param fp file pointer on an already open file (actually: Output File Stream) * @param filetype Type of the File to be written * (ACR-NEMA, ExplicitVR, ImplicitVR) - * @return Always true. */ void Document::WriteContent(std::ofstream *fp, FileType filetype) { @@ -977,6 +976,14 @@ void Document::ParseDES(DocEntrySet *set, long offset, newDocEntry = ReadNextDocEntry( ); + // FIXME : + // Private tag, in IMplicit VR are defaulted as a BinEntry, + // Very often they are only composed of Printable characters, + // and could be defaulted as a ValEntry. + // It's too late to do the Job + // (we should check the value, but we know it after LoadDocEntry ...) + // --> in next gdcm major release let's unify ValEntry and BinEntry ! + // Uncoment this printf line to be able to 'follow' the DocEntries // when something *very* strange happens @@ -989,7 +996,7 @@ void Document::ParseDES(DocEntrySet *set, long offset, break; } - // an Item Starter found elsewhere but the first postition + // an Item Starter found elsewhere but 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. @@ -1149,7 +1156,7 @@ void Document::ParseDES(DocEntrySet *set, long offset, if ( newDocEntry->GetGroup()%2 != 0 ) { Fp->seekg( l, std::ios::cur); - used = false; + //used = false; // never used continue; } } @@ -1157,7 +1164,7 @@ void Document::ParseDES(DocEntrySet *set, long offset, { // User asked to skip *any* SeQuence Fp->seekg( l, std::ios::cur); - used = false; + //used = false; // never used continue; } // delay the dynamic cast as late as possible @@ -1204,7 +1211,7 @@ void Document::ParseDES(DocEntrySet *set, long offset, used = false; } - if ( !delim_mode && ((long)(Fp->tellg())-offset) >= l_max) + if ( !delim_mode && ((long)(Fp->tellg())-offset) >= l_max) { if ( !used ) delete newDocEntry; @@ -1691,7 +1698,7 @@ std::string Document::FindDocEntryVR() * and the taken VR. If they are different, the header entry is * updated with the new VR. * @param vr Dicom Value Representation - * @return false if the VR is incorrect of if the VR isn't referenced + * @return false if the VR is incorrect or if the VR isn't referenced * otherwise, it returns true */ bool Document::CheckDocEntryVR(VRKey vr) @@ -2244,7 +2251,7 @@ DocEntry *Document::ReadNextDocEntry() group = ReadInt16(); elem = ReadInt16(); } - catch ( FormatError e ) + catch ( FormatError ) { // We reached the EOF (or an error occured) therefore // header parsing has to be considered as finished. @@ -2264,7 +2271,15 @@ DocEntry *Document::ReadNextDocEntry() if ( vr == GDCM_UNKNOWN ) { if ( elem == 0x0000 ) // Group Length + { realVR = "UL"; // must be UL + } + else if (group%2 == 1 && (elem >= 0x0010 && elem <=0x00ff )) + { + // DICOM PS 3-5 7.8.1 a) states that those + // (gggg-0010->00FF where gggg is odd) attributes have to be LO + realVR = "LO"; + } else { DictEntry *dictEntry = GetDictEntry(group,elem); @@ -2279,9 +2294,9 @@ DocEntry *Document::ReadNextDocEntry() if ( Global::GetVR()->IsVROfSequence(realVR) ) newEntry = NewSeqEntry(group, elem); else if ( Global::GetVR()->IsVROfStringRepresentable(realVR) ) - newEntry = NewValEntry(group, elem,vr); + newEntry = NewValEntry(group, elem, realVR); else - newEntry = NewBinEntry(group, elem,vr); + newEntry = NewBinEntry(group, elem, realVR); if ( vr == GDCM_UNKNOWN ) { @@ -2305,7 +2320,7 @@ DocEntry *Document::ReadNextDocEntry() { FindDocEntryLength(newEntry); } - catch ( FormatError e ) + catch ( FormatError ) { // Call it quits delete newEntry;