X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmHeader.cxx;h=a16d0693841a40f35696f18e52fc917dd1c5aebd;hb=f41fb331c46df02fd4e284960f0473d7155573a2;hp=0ccd21e5cdfb5fb083c5639bd46dc93b2f57b213;hpb=ea7d6b73b6e3707747332e25bcc3f4ad4cd76c9c;p=gdcm.git diff --git a/src/gdcmHeader.cxx b/src/gdcmHeader.cxx index 0ccd21e5..a16d0693 100644 --- a/src/gdcmHeader.cxx +++ b/src/gdcmHeader.cxx @@ -43,6 +43,7 @@ gdcmHeader::gdcmHeader(const char *InFilename, bool exception_on_error) else dbg.Error(!fp, "gdcmHeader::gdcmHeader cannot open file", InFilename); ParseHeader(); + LoadElements(); AddAndDefaultElements(); } @@ -729,16 +730,7 @@ void gdcmHeader::LoadElementValue(gdcmElValue * ElVal) { if( group == 0xfffe ) SkipLoad = true; - // The group length doesn't represent data to be loaded in memory, since - // each element of the group shall be loaded individualy. - if( elem == 0 ) - //SkipLoad = true; // modif sauvage JPR - // On charge la longueur du groupe - // quand l'element 0x0000 est présent ! - if ( SkipLoad ) { - // FIXME the following skip is not necessary - SkipElementValue(ElVal); ElVal->SetLength(0); ElVal->SetValue("gdcm::Skipped"); return; @@ -1393,19 +1385,64 @@ void gdcmHeader::ParseHeader(bool exception_on_error) throw(gdcmFormatError) { * the ones of the official DICOM fields Rows, Columns and Planes. */ void gdcmHeader::AddAndDefaultElements(void) { - gdcmElValue* NewEntry = (gdcmElValue*)0; + gdcmElValue* NewElVal = (gdcmElValue*)0; + string NewVal; + + NewElVal = NewManualElValToPubDict("gdcmXSize", "US"); + if (!NewElVal) return; + NewVal = GetElValByName("Rows"); + if (NewVal != "gdcm::Unfound") + NewElVal->SetValue(NewVal); + else + NewElVal->SetValue("0"); + + + NewElVal = NewManualElValToPubDict("gdcmYSize", "US"); + if (!NewElVal) return; + NewVal = GetElValByName("Columns"); + if (NewVal != "gdcm::Unfound") + NewElVal->SetValue(NewVal); + else + NewElVal->SetValue("0"); - NewEntry = NewElValueByName("gdcmXSize"); - NewEntry->SetValue(GetElValByName("Rows")); - PubElVals.Add(NewEntry); - NewEntry = NewElValueByName("gdcmYSize"); - NewEntry->SetValue(GetElValByName("Columns")); - PubElVals.Add(NewEntry); + NewElVal = NewManualElValToPubDict("gdcmZSize", "US"); + if (!NewElVal) return; + NewVal = GetElValByName("Planes"); + if (NewVal != "gdcm::Unfound") + NewElVal->SetValue(NewVal); + else + NewElVal->SetValue("0"); +} - NewEntry = NewElValueByName("gdcmZSize"); - NewEntry->SetValue(GetElValByName("Planes")); - PubElVals.Add(NewEntry); +/** + * \ingroup gdcmHeader + * \brief Small utility function that creates a new manually crafted + * (as opposed as read from the file) gdcmElValue with user + * specified name and adds it to the public tag hash table. + * Refer to gdcmHeader::AddAndDefaultElements for a typical usage. + * \note A fake TagKey is generated so the PubDict can keep it's coherence. + * @param NewTagName The name to be given to this new tag. + * @param VR The Value Representation to be given to this new tag. + * @ return The newly hand crafted Element Value. + */ +gdcmElValue* gdcmHeader::NewManualElValToPubDict(string NewTagName, string VR) { + gdcmElValue* NewElVal = (gdcmElValue*)0; + guint32 StuffGroup = 0xffff; // Group to be stuffed with additional info + guint32 FreeElem = 0; + gdcmDictEntry* NewEntry = (gdcmDictEntry*)0; + + FreeElem = PubElVals.GenerateFreeTagKeyInGroup(StuffGroup); + if (FreeElem == UINT32_MAX) { + dbg.Verbose(1, "gdcmHeader::NewManualElValToPubDict", + "Group 0xffff in Public Dict is full"); + return (gdcmElValue*)0; + } + NewEntry = new gdcmDictEntry(StuffGroup, FreeElem, + VR, "GDCM", NewTagName); + NewElVal = new gdcmElValue(NewEntry); + PubElVals.Add(NewElVal); + return NewElVal; } /**