Mercurial > hg > orthanc
comparison UnitTestsSources/FromDcmtkTests.cpp @ 1940:5514d37176b4
PatternUint16
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 25 Mar 2016 11:08:07 +0100 |
parents | 3756bedaaa36 |
children | d7b176f7dd1b |
comparison
equal
deleted
inserted
replaced
1939:d80a4fe8ffcc | 1940:5514d37176b4 |
---|---|
40 #include "../Core/OrthancException.h" | 40 #include "../Core/OrthancException.h" |
41 #include "../Core/Images/ImageBuffer.h" | 41 #include "../Core/Images/ImageBuffer.h" |
42 #include "../Core/Images/PngReader.h" | 42 #include "../Core/Images/PngReader.h" |
43 #include "../Core/Images/PngWriter.h" | 43 #include "../Core/Images/PngWriter.h" |
44 #include "../Core/Images/Image.h" | 44 #include "../Core/Images/Image.h" |
45 #include "../Core/Images/ImageProcessing.h" | |
45 #include "../Core/Uuid.h" | 46 #include "../Core/Uuid.h" |
47 #include "../Core/Endianness.h" | |
46 #include "../Resources/EncodingTests.h" | 48 #include "../Resources/EncodingTests.h" |
47 #include "../OrthancServer/DicomProtocol/DicomFindAnswers.h" | 49 #include "../OrthancServer/DicomProtocol/DicomFindAnswers.h" |
50 #include "../OrthancServer/Internals/DicomImageDecoder.h" | |
48 | 51 |
49 #include <dcmtk/dcmdata/dcelem.h> | 52 #include <dcmtk/dcmdata/dcelem.h> |
50 | 53 |
51 using namespace Orthanc; | 54 using namespace Orthanc; |
52 | 55 |
763 } | 766 } |
764 } | 767 } |
765 | 768 |
766 | 769 |
767 | 770 |
768 TEST(TestImages, DISABLED_PatternUint16) | 771 TEST(TestImages, PatternUint16) |
769 { | 772 { |
773 static const char* PATH = "UnitTestsResults/PatternGrayscale16.dcm"; | |
774 | |
770 Orthanc::Image image(Orthanc::PixelFormat_Grayscale16, 256, 256); | 775 Orthanc::Image image(Orthanc::PixelFormat_Grayscale16, 256, 256); |
771 | 776 |
772 uint16_t v = 0; | 777 uint16_t v = 0; |
773 for (int y = 0; y < 256; y++) | 778 for (int y = 0; y < 256; y++) |
774 { | 779 { |
775 uint16_t *p = reinterpret_cast<uint16_t*>(image.GetRow(y)); | 780 uint16_t *p = reinterpret_cast<uint16_t*>(image.GetRow(y)); |
776 for (int x = 0; x < 256; x++, v++, p++) | 781 for (int x = 0; x < 256; x++, v++, p++) |
777 { | 782 { |
778 *p = v; | 783 *p = htole16(v); // Orthanc uses Little-Endian transfer syntax to encode images |
779 } | 784 } |
780 } | 785 } |
781 | 786 |
782 ParsedDicomFile f(true); | 787 Orthanc::ImageAccessor r = image.GetRegion(32, 32, 64, 192); |
783 f.Replace(DICOM_TAG_PATIENT_ID, "ORTHANC"); | 788 Orthanc::ImageProcessing::Set(r, 0); |
784 f.Replace(DICOM_TAG_PATIENT_NAME, "Orthanc"); | 789 r = image.GetRegion(160, 32, 64, 192); |
785 f.Replace(DICOM_TAG_STUDY_DESCRIPTION, "Patterns"); | 790 Orthanc::ImageProcessing::Set(r, 65535); |
786 f.Replace(DICOM_TAG_SERIES_DESCRIPTION, "Grayscale16"); | 791 |
787 f.EmbedImage(image); | 792 { |
788 | 793 ParsedDicomFile f(true); |
789 f.SaveToFile("PatternGrayscale16.dcm"); | 794 f.Replace(DICOM_TAG_PATIENT_ID, "ORTHANC"); |
790 } | 795 f.Replace(DICOM_TAG_PATIENT_NAME, "Orthanc"); |
791 | 796 f.Replace(DICOM_TAG_STUDY_DESCRIPTION, "Patterns"); |
792 | 797 f.Replace(DICOM_TAG_SERIES_DESCRIPTION, "Grayscale16"); |
798 f.EmbedImage(image); | |
799 | |
800 f.SaveToFile(PATH); | |
801 } | |
802 | |
803 { | |
804 std::string s; | |
805 Orthanc::Toolbox::ReadFile(s, PATH); | |
806 Orthanc::ParsedDicomFile f(s); | |
807 | |
808 std::auto_ptr<Orthanc::ImageAccessor> decoded(Orthanc::DicomImageDecoder::Decode(f, 0)); | |
809 ASSERT_EQ(256, decoded->GetWidth()); | |
810 ASSERT_EQ(256, decoded->GetHeight()); | |
811 ASSERT_EQ(Orthanc::PixelFormat_Grayscale16, decoded->GetFormat()); | |
812 | |
813 for (int y = 0; y < 256; y++) | |
814 { | |
815 const void* a = image.GetConstRow(y); | |
816 const void* b = decoded->GetConstRow(y); | |
817 ASSERT_EQ(0, memcmp(a, b, 512)); | |
818 } | |
819 } | |
820 } |