Mercurial > hg > orthanc
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 |