comparison OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.cpp @ 4953:60cb4b379485

added FromDcmtkBridge::LookupStringValue()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 22 Mar 2022 12:37:24 +0100
parents e100fd9db29b
children e1495a34cd39
comparison
equal deleted inserted replaced
4952:15ce7af202f1 4953:60cb4b379485
3224 3224
3225 Visitor visitor(target, sequenceIndex); 3225 Visitor visitor(target, sequenceIndex);
3226 IDicomPathVisitor::Apply(visitor, dataset, path); 3226 IDicomPathVisitor::Apply(visitor, dataset, path);
3227 return visitor.HasFound(); 3227 return visitor.HasFound();
3228 } 3228 }
3229
3230
3231 bool FromDcmtkBridge::LookupStringValue(std::string& target,
3232 DcmDataset& dataset,
3233 const DicomTag& key)
3234 {
3235 DcmTagKey dcmkey(key.GetGroup(), key.GetElement());
3236
3237 const char* str = NULL;
3238 const Uint8* data = NULL;
3239 unsigned long size = 0;
3240
3241 if (dataset.findAndGetString(dcmkey, str).good() &&
3242 str != NULL)
3243 {
3244 target.assign(str);
3245 return true;
3246 }
3247 else if (dataset.findAndGetUint8Array(dcmkey, data, &size).good() &&
3248 data != NULL &&
3249 size > 0)
3250 {
3251 /**
3252 * This special case is necessary for borderline DICOM files
3253 * that have DICOM tags have the "UN" value representation. New
3254 * in Orthanc 1.10.1.
3255 * https://groups.google.com/g/orthanc-users/c/86fobx3ZyoM/m/KBG17un6AQAJ
3256 **/
3257 unsigned long l = 0;
3258 while (l < size &&
3259 data[l] != 0)
3260 {
3261 l++;
3262 }
3263
3264 target.assign(reinterpret_cast<const char*>(data), l);
3265 return true;
3266 }
3267 else
3268 {
3269 return false;
3270 }
3271 }
3229 } 3272 }
3230 3273
3231 3274
3232 #include "./FromDcmtkBridge_TransferSyntaxes.impl.h" 3275 #include "./FromDcmtkBridge_TransferSyntaxes.impl.h"