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 }