comparison UnitTestsSources/FromDcmtkTests.cpp @ 1982:b5d4f9c156ad

Modification of instances can now replace PixelData
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 22 Apr 2016 10:28:55 +0200
parents 4b545a8b1f95
children 6301bbcbcaed
comparison
equal deleted inserted replaced
1981:4b545a8b1f95 1982:b5d4f9c156ad
74 TEST(DicomModification, Basic) 74 TEST(DicomModification, Basic)
75 { 75 {
76 DicomModification m; 76 DicomModification m;
77 m.SetupAnonymization(); 77 m.SetupAnonymization();
78 //m.SetLevel(DicomRootLevel_Study); 78 //m.SetLevel(DicomRootLevel_Study);
79 //m.Replace(DICOM_TAG_PATIENT_ID, "coucou"); 79 //m.ReplacePlainString(DICOM_TAG_PATIENT_ID, "coucou");
80 //m.Replace(DICOM_TAG_PATIENT_NAME, "coucou"); 80 //m.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "coucou");
81 81
82 ParsedDicomFile o(true); 82 ParsedDicomFile o(true);
83 o.SaveToFile("UnitTestsResults/anon.dcm"); 83 o.SaveToFile("UnitTestsResults/anon.dcm");
84 84
85 for (int i = 0; i < 10; i++) 85 for (int i = 0; i < 10; i++)
86 { 86 {
87 char b[1024]; 87 char b[1024];
88 sprintf(b, "UnitTestsResults/anon%06d.dcm", i); 88 sprintf(b, "UnitTestsResults/anon%06d.dcm", i);
89 std::auto_ptr<ParsedDicomFile> f(o.Clone()); 89 std::auto_ptr<ParsedDicomFile> f(o.Clone());
90 if (i > 4) 90 if (i > 4)
91 o.Replace(DICOM_TAG_SERIES_INSTANCE_UID, "coucou"); 91 o.ReplacePlainString(DICOM_TAG_SERIES_INSTANCE_UID, "coucou");
92 m.Apply(*f); 92 m.Apply(*f);
93 f->SaveToFile(b); 93 f->SaveToFile(b);
94 } 94 }
95 } 95 }
96 96
106 ASSERT_EQ(0x0031, privateTag2.GetGroup()); 106 ASSERT_EQ(0x0031, privateTag2.GetGroup());
107 ASSERT_EQ(0x1020, privateTag2.GetElement()); 107 ASSERT_EQ(0x1020, privateTag2.GetElement());
108 108
109 std::string s; 109 std::string s;
110 ParsedDicomFile o(true); 110 ParsedDicomFile o(true);
111 o.Replace(DICOM_TAG_PATIENT_NAME, "coucou"); 111 o.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "coucou");
112 ASSERT_FALSE(o.GetTagValue(s, privateTag)); 112 ASSERT_FALSE(o.GetTagValue(s, privateTag));
113 o.Insert(privateTag, "private tag", false); 113 o.Insert(privateTag, "private tag", false);
114 ASSERT_TRUE(o.GetTagValue(s, privateTag)); 114 ASSERT_TRUE(o.GetTagValue(s, privateTag));
115 ASSERT_STREQ("private tag", s.c_str()); 115 ASSERT_STREQ("private tag", s.c_str());
116 116
117 ASSERT_FALSE(o.GetTagValue(s, privateTag2)); 117 ASSERT_FALSE(o.GetTagValue(s, privateTag2));
118 ASSERT_THROW(o.Replace(privateTag2, "hello", DicomReplaceMode_ThrowIfAbsent), OrthancException); 118 ASSERT_THROW(o.Replace(privateTag2, std::string("hello"), false, DicomReplaceMode_ThrowIfAbsent), OrthancException);
119 ASSERT_FALSE(o.GetTagValue(s, privateTag2)); 119 ASSERT_FALSE(o.GetTagValue(s, privateTag2));
120 o.Replace(privateTag2, "hello", DicomReplaceMode_IgnoreIfAbsent); 120 o.Replace(privateTag2, std::string("hello"), false, DicomReplaceMode_IgnoreIfAbsent);
121 ASSERT_FALSE(o.GetTagValue(s, privateTag2)); 121 ASSERT_FALSE(o.GetTagValue(s, privateTag2));
122 o.Replace(privateTag2, "hello", DicomReplaceMode_InsertIfAbsent); 122 o.Replace(privateTag2, std::string("hello"), false, DicomReplaceMode_InsertIfAbsent);
123 ASSERT_TRUE(o.GetTagValue(s, privateTag2)); 123 ASSERT_TRUE(o.GetTagValue(s, privateTag2));
124 ASSERT_STREQ("hello", s.c_str()); 124 ASSERT_STREQ("hello", s.c_str());
125 o.Replace(privateTag2, "hello world"); 125 o.ReplacePlainString(privateTag2, "hello world");
126 ASSERT_TRUE(o.GetTagValue(s, privateTag2)); 126 ASSERT_TRUE(o.GetTagValue(s, privateTag2));
127 ASSERT_STREQ("hello world", s.c_str()); 127 ASSERT_STREQ("hello world", s.c_str());
128 128
129 ASSERT_TRUE(o.GetTagValue(s, DICOM_TAG_PATIENT_NAME)); 129 ASSERT_TRUE(o.GetTagValue(s, DICOM_TAG_PATIENT_NAME));
130 ASSERT_FALSE(Toolbox::IsUuid(s)); 130 ASSERT_FALSE(Toolbox::IsUuid(s));
175 o.SaveToFile("UnitTestsResults/png2.dcm"); 175 o.SaveToFile("UnitTestsResults/png2.dcm");
176 176
177 // Check box in Graylevel8 177 // Check box in Graylevel8
178 s = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gUGDDcB53FulQAAAElJREFUGNNtj0sSAEEEQ1+U+185s1CtmRkblQ9CZldsKHJDk6DLGLJa6chjh0ooQmpjXMM86zPwydGEj6Ed/UGykkEM8X+p3u8/8LcOJIWLGeMAAAAASUVORK5CYII="; 178 s = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gUGDDcB53FulQAAAElJREFUGNNtj0sSAEEEQ1+U+185s1CtmRkblQ9CZldsKHJDk6DLGLJa6chjh0ooQmpjXMM86zPwydGEj6Ed/UGykkEM8X+p3u8/8LcOJIWLGeMAAAAASUVORK5CYII=";
179 o.EmbedContent(s); 179 o.EmbedContent(s);
180 //o.Replace(DICOM_TAG_SOP_CLASS_UID, UID_DigitalXRayImageStorageForProcessing); 180 //o.ReplacePlainString(DICOM_TAG_SOP_CLASS_UID, UID_DigitalXRayImageStorageForProcessing);
181 o.SaveToFile("UnitTestsResults/png3.dcm"); 181 o.SaveToFile("UnitTestsResults/png3.dcm");
182 182
183 183
184 { 184 {
185 // Gradient in Graylevel16 185 // Gradient in Graylevel16
414 { 414 {
415 ParsedDicomFile f(true); 415 ParsedDicomFile f(true);
416 416
417 f.Insert(DICOM_TAG_PATIENT_NAME, "World", false); 417 f.Insert(DICOM_TAG_PATIENT_NAME, "World", false);
418 ASSERT_THROW(f.Insert(DICOM_TAG_PATIENT_ID, "Hello", false), OrthancException); // Already existing tag 418 ASSERT_THROW(f.Insert(DICOM_TAG_PATIENT_ID, "Hello", false), OrthancException); // Already existing tag
419 f.Replace(DICOM_TAG_SOP_INSTANCE_UID, "Toto"); // (*) 419 f.ReplacePlainString(DICOM_TAG_SOP_INSTANCE_UID, "Toto"); // (*)
420 f.Replace(DICOM_TAG_SOP_CLASS_UID, "Tata"); // (**) 420 f.ReplacePlainString(DICOM_TAG_SOP_CLASS_UID, "Tata"); // (**)
421 421
422 std::string s; 422 std::string s;
423 423
424 ASSERT_THROW(f.Replace(DICOM_TAG_ACCESSION_NUMBER, "Accession", DicomReplaceMode_ThrowIfAbsent), OrthancException); 424 ASSERT_THROW(f.Replace(DICOM_TAG_ACCESSION_NUMBER, std::string("Accession"),
425 f.Replace(DICOM_TAG_ACCESSION_NUMBER, "Accession", DicomReplaceMode_IgnoreIfAbsent); 425 false, DicomReplaceMode_ThrowIfAbsent), OrthancException);
426 f.Replace(DICOM_TAG_ACCESSION_NUMBER, std::string("Accession"), false, DicomReplaceMode_IgnoreIfAbsent);
426 ASSERT_FALSE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER)); 427 ASSERT_FALSE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER));
427 f.Replace(DICOM_TAG_ACCESSION_NUMBER, "Accession", DicomReplaceMode_InsertIfAbsent); 428 f.Replace(DICOM_TAG_ACCESSION_NUMBER, std::string("Accession"), false, DicomReplaceMode_InsertIfAbsent);
428 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER)); 429 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER));
429 ASSERT_EQ(s, "Accession"); 430 ASSERT_EQ(s, "Accession");
430 f.Replace(DICOM_TAG_ACCESSION_NUMBER, "Accession2", DicomReplaceMode_IgnoreIfAbsent); 431 f.Replace(DICOM_TAG_ACCESSION_NUMBER, std::string("Accession2"), false, DicomReplaceMode_IgnoreIfAbsent);
431 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER)); 432 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER));
432 ASSERT_EQ(s, "Accession2"); 433 ASSERT_EQ(s, "Accession2");
433 f.Replace(DICOM_TAG_ACCESSION_NUMBER, "Accession3", DicomReplaceMode_ThrowIfAbsent); 434 f.Replace(DICOM_TAG_ACCESSION_NUMBER, std::string("Accession3"), false, DicomReplaceMode_ThrowIfAbsent);
434 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER)); 435 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_ACCESSION_NUMBER));
435 ASSERT_EQ(s, "Accession3"); 436 ASSERT_EQ(s, "Accession3");
436 437
437 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_PATIENT_NAME)); 438 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_PATIENT_NAME));
438 ASSERT_EQ(s, "World"); 439 ASSERT_EQ(s, "World");
484 ASSERT_EQ(0, c["ReferencedPatientSequence"].compare(a)); 485 ASSERT_EQ(0, c["ReferencedPatientSequence"].compare(a));
485 ASSERT_NE(0, c["ReferencedStudySequence"].compare(a)); // Because Data URI Scheme decoding was enabled 486 ASSERT_NE(0, c["ReferencedStudySequence"].compare(a)); // Because Data URI Scheme decoding was enabled
486 } 487 }
487 488
488 a = "data:application/octet-stream;base64,VGF0YQ=="; // echo -n "Tata" | base64 489 a = "data:application/octet-stream;base64,VGF0YQ=="; // echo -n "Tata" | base64
489 f.Replace(DICOM_TAG_SOP_INSTANCE_UID, a, false); // (*) 490 f.Replace(DICOM_TAG_SOP_INSTANCE_UID, a, false, DicomReplaceMode_InsertIfAbsent); // (*)
490 f.Replace(DICOM_TAG_SOP_CLASS_UID, a, true); // (**) 491 f.Replace(DICOM_TAG_SOP_CLASS_UID, a, true, DicomReplaceMode_InsertIfAbsent); // (**)
491 492
492 std::string s; 493 std::string s;
493 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_SOP_INSTANCE_UID)); 494 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_SOP_INSTANCE_UID));
494 ASSERT_EQ(s, a.asString()); 495 ASSERT_EQ(s, a.asString());
495 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_MEDIA_STORAGE_SOP_INSTANCE_UID)); // Implicitly modified by (*) 496 ASSERT_TRUE(f.GetTagValue(s, DICOM_TAG_MEDIA_STORAGE_SOP_INSTANCE_UID)); // Implicitly modified by (*)
516 { 517 {
517 ASSERT_EQ(testEncodings[i], f.GetEncoding()); 518 ASSERT_EQ(testEncodings[i], f.GetEncoding());
518 } 519 }
519 520
520 Json::Value s = Toolbox::ConvertToUtf8(testEncodingsEncoded[i], testEncodings[i]); 521 Json::Value s = Toolbox::ConvertToUtf8(testEncodingsEncoded[i], testEncodings[i]);
521 f.Replace(DICOM_TAG_PATIENT_NAME, s, false); 522 f.Replace(DICOM_TAG_PATIENT_NAME, s, false, DicomReplaceMode_InsertIfAbsent);
522 523
523 Json::Value v; 524 Json::Value v;
524 f.ToJson(v, DicomToJsonFormat_Human, DicomToJsonFlags_Default, 0); 525 f.ToJson(v, DicomToJsonFormat_Human, DicomToJsonFlags_Default, 0);
525 ASSERT_EQ(v["PatientName"].asString(), std::string(testEncodingsExpected[i])); 526 ASSERT_EQ(v["PatientName"].asString(), std::string(testEncodingsExpected[i]));
526 } 527 }
649 a.Add(m); 650 a.Add(m);
650 } 651 }
651 652
652 { 653 {
653 ParsedDicomFile d(true); 654 ParsedDicomFile d(true);
654 d.Replace(DICOM_TAG_PATIENT_ID, "my"); 655 d.ReplacePlainString(DICOM_TAG_PATIENT_ID, "my");
655 a.Add(d); 656 a.Add(d);
656 } 657 }
657 658
658 { 659 {
659 DicomMap m; 660 DicomMap m;
788 r = image.GetRegion(160, 32, 64, 192); 789 r = image.GetRegion(160, 32, 64, 192);
789 Orthanc::ImageProcessing::Set(r, 255); 790 Orthanc::ImageProcessing::Set(r, 255);
790 791
791 { 792 {
792 ParsedDicomFile f(true); 793 ParsedDicomFile f(true);
793 f.Replace(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7"); 794 f.ReplacePlainString(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7");
794 f.Replace(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998"); 795 f.ReplacePlainString(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998");
795 f.Replace(DICOM_TAG_PATIENT_ID, "ORTHANC"); 796 f.ReplacePlainString(DICOM_TAG_PATIENT_ID, "ORTHANC");
796 f.Replace(DICOM_TAG_PATIENT_NAME, "Orthanc"); 797 f.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "Orthanc");
797 f.Replace(DICOM_TAG_STUDY_DESCRIPTION, "Patterns"); 798 f.ReplacePlainString(DICOM_TAG_STUDY_DESCRIPTION, "Patterns");
798 f.Replace(DICOM_TAG_SERIES_DESCRIPTION, "Grayscale8"); 799 f.ReplacePlainString(DICOM_TAG_SERIES_DESCRIPTION, "Grayscale8");
799 f.EmbedImage(image); 800 f.EmbedImage(image);
800 801
801 f.SaveToFile(PATH); 802 f.SaveToFile(PATH);
802 } 803 }
803 804
850 } 851 }
851 } 852 }
852 853
853 { 854 {
854 ParsedDicomFile f(true); 855 ParsedDicomFile f(true);
855 f.Replace(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7"); 856 f.ReplacePlainString(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7");
856 f.Replace(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998"); 857 f.ReplacePlainString(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998");
857 f.Replace(DICOM_TAG_PATIENT_ID, "ORTHANC"); 858 f.ReplacePlainString(DICOM_TAG_PATIENT_ID, "ORTHANC");
858 f.Replace(DICOM_TAG_PATIENT_NAME, "Orthanc"); 859 f.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "Orthanc");
859 f.Replace(DICOM_TAG_STUDY_DESCRIPTION, "Patterns"); 860 f.ReplacePlainString(DICOM_TAG_STUDY_DESCRIPTION, "Patterns");
860 f.Replace(DICOM_TAG_SERIES_DESCRIPTION, "RGB24"); 861 f.ReplacePlainString(DICOM_TAG_SERIES_DESCRIPTION, "RGB24");
861 f.EmbedImage(image); 862 f.EmbedImage(image);
862 863
863 f.SaveToFile(PATH); 864 f.SaveToFile(PATH);
864 } 865 }
865 866
904 r = image.GetRegion(160, 32, 64, 192); 905 r = image.GetRegion(160, 32, 64, 192);
905 Orthanc::ImageProcessing::Set(r, 65535); 906 Orthanc::ImageProcessing::Set(r, 65535);
906 907
907 { 908 {
908 ParsedDicomFile f(true); 909 ParsedDicomFile f(true);
909 f.Replace(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7"); 910 f.ReplacePlainString(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7");
910 f.Replace(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998"); 911 f.ReplacePlainString(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998");
911 f.Replace(DICOM_TAG_PATIENT_ID, "ORTHANC"); 912 f.ReplacePlainString(DICOM_TAG_PATIENT_ID, "ORTHANC");
912 f.Replace(DICOM_TAG_PATIENT_NAME, "Orthanc"); 913 f.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "Orthanc");
913 f.Replace(DICOM_TAG_STUDY_DESCRIPTION, "Patterns"); 914 f.ReplacePlainString(DICOM_TAG_STUDY_DESCRIPTION, "Patterns");
914 f.Replace(DICOM_TAG_SERIES_DESCRIPTION, "Grayscale16"); 915 f.ReplacePlainString(DICOM_TAG_SERIES_DESCRIPTION, "Grayscale16");
915 f.EmbedImage(image); 916 f.EmbedImage(image);
916 917
917 f.SaveToFile(PATH); 918 f.SaveToFile(PATH);
918 } 919 }
919 920
958 r = image.GetRegion(160, 32, 64, 192); 959 r = image.GetRegion(160, 32, 64, 192);
959 Orthanc::ImageProcessing::Set(r, 32767); 960 Orthanc::ImageProcessing::Set(r, 32767);
960 961
961 { 962 {
962 ParsedDicomFile f(true); 963 ParsedDicomFile f(true);
963 f.Replace(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7"); 964 f.ReplacePlainString(DICOM_TAG_SOP_CLASS_UID, "1.2.840.10008.5.1.4.1.1.7");
964 f.Replace(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998"); 965 f.ReplacePlainString(DICOM_TAG_STUDY_INSTANCE_UID, "1.2.276.0.7230010.3.1.2.2831176407.321.1458901422.884998");
965 f.Replace(DICOM_TAG_PATIENT_ID, "ORTHANC"); 966 f.ReplacePlainString(DICOM_TAG_PATIENT_ID, "ORTHANC");
966 f.Replace(DICOM_TAG_PATIENT_NAME, "Orthanc"); 967 f.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "Orthanc");
967 f.Replace(DICOM_TAG_STUDY_DESCRIPTION, "Patterns"); 968 f.ReplacePlainString(DICOM_TAG_STUDY_DESCRIPTION, "Patterns");
968 f.Replace(DICOM_TAG_SERIES_DESCRIPTION, "SignedGrayscale16"); 969 f.ReplacePlainString(DICOM_TAG_SERIES_DESCRIPTION, "SignedGrayscale16");
969 f.EmbedImage(image); 970 f.EmbedImage(image);
970 971
971 f.SaveToFile(PATH); 972 f.SaveToFile(PATH);
972 } 973 }
973 974