comparison OrthancServer/ParsedDicomFile.cpp @ 991:2f76b92addd4

keep private tags during anonymization
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 02 Jul 2014 11:56:08 +0200
parents 2fd5a163776d
children af014624dac1 a226e0959d8b
comparison
equal deleted inserted replaced
990:7cbcd580cd21 991:2f76b92addd4
754 } 754 }
755 } 755 }
756 756
757 757
758 758
759 void ParsedDicomFile::RemovePrivateTags() 759 void ParsedDicomFile::RemovePrivateTagsInternal(const std::set<DicomTag>* toKeep)
760 { 760 {
761 DcmDataset& dataset = *pimpl_->file_->getDataset();
762
763 // Loop over the dataset to detect its private tags
761 typedef std::list<DcmElement*> Tags; 764 typedef std::list<DcmElement*> Tags;
762
763 Tags privateTags; 765 Tags privateTags;
764 766
765 DcmDataset& dataset = *pimpl_->file_->getDataset();
766 for (unsigned long i = 0; i < dataset.card(); i++) 767 for (unsigned long i = 0; i < dataset.card(); i++)
767 { 768 {
768 DcmElement* element = dataset.getElement(i); 769 DcmElement* element = dataset.getElement(i);
769 DcmTag tag(element->getTag()); 770 DcmTag tag(element->getTag());
770 if (!strcmp("PrivateCreator", tag.getTagName()) || // TODO - This may change with future versions of DCMTK 771
771 tag.getPrivateCreator() != NULL) 772 // Is this a private tag?
772 { 773 if (FromDcmtkBridge::IsPrivateTag(tag))
773 privateTags.push_back(element); 774 {
774 } 775 bool remove = true;
775 } 776
776 777 // Check whether this private tag is to be kept
778 if (toKeep != NULL)
779 {
780 DicomTag tmp = FromDcmtkBridge::Convert(tag);
781 if (toKeep->find(tmp) != toKeep->end())
782 {
783 remove = false; // Keep it
784 }
785 }
786
787 if (remove)
788 {
789 privateTags.push_back(element);
790 }
791 }
792 }
793
794 // Loop over the detected private tags to remove them
777 for (Tags::iterator it = privateTags.begin(); 795 for (Tags::iterator it = privateTags.begin();
778 it != privateTags.end(); ++it) 796 it != privateTags.end(); ++it)
779 { 797 {
780 DcmElement* tmp = dataset.remove(*it); 798 DcmElement* tmp = dataset.remove(*it);
781 if (tmp != NULL) 799 if (tmp != NULL)