+ //Fp->seekg(0, std::ios::beg); // Once per Document!
+
+ // Load 'non string' values
+
+ std::string PhotometricInterpretation = GetEntryString(0x0028,0x0004);
+ if ( PhotometricInterpretation == "PALETTE COLOR " )
+ {
+ // FIXME
+ // Probabely this line should be outside the 'if'
+ // Try to find an image sample holding a 'gray LUT'
+ LoadEntryBinArea(0x0028,0x1200); // gray LUT
+
+ /// FIXME
+ /// --> FIXME : The difference between BinEntry and DataEntry
+ /// --> no longer exists, but the alteration of Dicom Dictionary remains.
+ /// --> Old comment restored on purpose.
+ /// --> New one (replacing both BinEntry and ValEntry by DataEntry)
+ /// --> had absolutely no meaning.
+ /// --> The whole comment will be removed when the stuff is cleaned !
+ /// -->
+ /// The tags refered by the three following lines used to be CORRECTLY
+ /// defined as having an US Value Representation in the public
+ /// dictionary. BUT the semantics implied by the three following
+ /// lines state that the corresponding tag contents are in fact
+ /// the ones of a BinEntry.
+ /// In order to fix things "Quick and Dirty" the dictionary was
+ /// altered on PURPOSE but now contains a WRONG value.
+ /// In order to fix things and restore the dictionary to its
+ /// correct value, one needs to decide of the semantics by deciding
+ /// whether the following tags are either :
+ /// - multivaluated US, and hence loaded as ValEntry, but afterwards
+ /// also used as BinEntry, which requires the proper conversion,
+ /// - OW, and hence loaded as BinEntry, but afterwards also used
+ /// as ValEntry, which requires the proper conversion.
+
+ // --> OB (byte aray) or OW (short int aray)
+ // The actual VR has to be deduced from other entries.
+ // Our way of loading them may fail in some cases :
+ // We must or not SwapByte depending on other field values.
+
+ LoadEntryBinArea(0x0028,0x1201); // R LUT
+ LoadEntryBinArea(0x0028,0x1202); // G LUT
+ LoadEntryBinArea(0x0028,0x1203); // B LUT
+
+ // Segmented Red Palette Color LUT Data
+ LoadEntryBinArea(0x0028,0x1221);
+ // Segmented Green Palette Color LUT Data
+ LoadEntryBinArea(0x0028,0x1222);
+ // Segmented Blue Palette Color LUT Data
+ LoadEntryBinArea(0x0028,0x1223);
+ }
+
+ //FIXME later : how to use it?
+ SeqEntry *modLutSeq = GetSeqEntry(0x0028,0x3000); // Modality LUT Sequence
+ if ( modLutSeq !=0 )
+ {
+ SQItem *sqi= modLutSeq->GetFirstSQItem();
+ if ( sqi != 0 )
+ {
+ DataEntry *dataEntry = sqi->GetDataEntry(0x0028,0x3006); // LUT Data
+ if ( dataEntry != 0 )
+ {
+ if ( dataEntry->GetLength() != 0 )
+ {
+ // FIXME : CTX dependent means : contexted dependant.
+ // see upper comment.
+ LoadEntryBinArea(dataEntry); //LUT Data (CTX dependent)
+ }
+ }
+ }
+ }
+
+ // Force Loading some more elements if user asked to.
+
+ gdcm::DocEntry *d;
+ for (ListElements::iterator it = UserForceLoadList.begin();
+ it != UserForceLoadList.end();
+ ++it)
+ {
+ gdcmDebugMacro( "Force Load " << std::hex
+ << (*it).Group << "|" <<(*it).Elem );
+
+ d = GetDocEntry( (*it).Group, (*it).Elem);
+
+ if ( d == NULL)
+ {
+ gdcmWarningMacro( "You asked to ForceLoad " << std::hex
+ << (*it).Group <<"|"<< (*it).Elem
+ << " that doesn't exist" );
+ continue;
+ }
+
+ LoadDocEntry(d, true);
+ }
+
+ CloseFile();
+
+ // ----------------------------
+ // Specific code to allow gdcm to read ACR-LibIDO formated images
+ // Note: ACR-LibIDO is an extension of the ACR standard that was
+ // used at CREATIS. For the time being (say a couple of years)
+ // we keep this kludge to allow CREATIS users
+ // reading their old images.
+ //
+ // if recognition code tells us we deal with a LibIDO image
+ // we switch lineNumber and columnNumber
+ //
+ std::string RecCode;
+ RecCode = GetEntryString(0x0008, 0x0010); // recognition code (RET)
+ if (RecCode == "ACRNEMA_LIBIDO_1.1" ||
+ RecCode == "CANRME_AILIBOD1_1." ) // for brain-damaged softwares
+ // with "little-endian strings"
+ {
+ Filetype = ACR_LIBIDO;
+ std::string rows = GetEntryString(0x0028, 0x0010);
+ std::string columns = GetEntryString(0x0028, 0x0011);
+ SetEntryString(columns, 0x0028, 0x0010);
+ SetEntryString(rows , 0x0028, 0x0011);
+ }
+ // --- End of ACR-LibIDO kludge ---
+ return true;