# HG changeset patch # User Sebastien Jodogne # Date 1610467797 -3600 # Node ID ef3f8c5126a47533fd6964f0eb88c7d80078fe27 # Parent c5a8b46c4cba4f3b240c45fd0d677cd35a83c564 Don't display the thumbnail/overview instances in the Web viewer diff -r c5a8b46c4cba -r ef3f8c5126a4 Framework/Inputs/DicomPyramid.cpp --- a/Framework/Inputs/DicomPyramid.cpp Tue Jan 12 16:20:57 2021 +0100 +++ b/Framework/Inputs/DicomPyramid.cpp Tue Jan 12 17:09:57 2021 +0100 @@ -23,8 +23,11 @@ #include "DicomPyramid.h" #include "../DicomToolbox.h" + +#include #include #include +#include #include #include @@ -84,15 +87,26 @@ throw Orthanc::OrthancException(Orthanc::ErrorCode_NetworkProtocol); } - std::string instance = instances[i].asString(); + std::string instanceId = instances[i].asString(); try { - instances_.push_back(new DicomPyramidInstance(orthanc_, instance, useCache)); + std::unique_ptr instance(new DicomPyramidInstance(orthanc_, instanceId, useCache)); + + std::vector tokens; + Orthanc::Toolbox::TokenizeString(tokens, instance->GetImageType(), '\\'); + + // Don't consider the thumbnail and overview as part of the DICOM pyramid (new in 0.8) + if (tokens.size() < 2 || + (tokens[2] != "THUMBNAIL" && + tokens[2] != "OVERVIEW")) + { + instances_.push_back(instance.release()); + } } catch (Orthanc::OrthancException&) { - LOG(ERROR) << "Skipping a DICOM instance that is not part of a whole-slide image: " << instance; + LOG(ERROR) << "Skipping a DICOM instance that is not part of a whole-slide image: " << instanceId; } } } diff -r c5a8b46c4cba -r ef3f8c5126a4 Framework/Inputs/DicomPyramidInstance.cpp --- a/Framework/Inputs/DicomPyramidInstance.cpp Tue Jan 12 16:20:57 2021 +0100 +++ b/Framework/Inputs/DicomPyramidInstance.cpp Tue Jan 12 17:09:57 2021 +0100 @@ -44,6 +44,7 @@ static const Orthanc::DicomTag DICOM_TAG_ROW_POSITION_IN_TOTAL_IMAGE_PIXEL_MATRIX(0x0048, 0x021f); static const Orthanc::DicomTag DICOM_TAG_TOTAL_PIXEL_MATRIX_COLUMNS(0x0048, 0x0006); static const Orthanc::DicomTag DICOM_TAG_TOTAL_PIXEL_MATRIX_ROWS(0x0048, 0x0007); + static const Orthanc::DicomTag DICOM_TAG_IMAGE_TYPE(0x0008, 0x0008); static ImageCompression DetectImageCompression(OrthancStone::IOrthancConnection& orthanc, const std::string& instanceId) @@ -173,6 +174,8 @@ throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); } + imageType_ = reader.GetStringValue(OrthancStone::DicomPath(DICOM_TAG_IMAGE_TYPE), ""); + size_t countFrames; if (reader.GetDataset().GetSequenceSize(countFrames, OrthancStone::DicomPath(DICOM_TAG_PER_FRAME_FUNCTIONAL_GROUPS_SEQUENCE))) { @@ -271,7 +274,6 @@ // Try and deserialized the cached information about this instance std::string serialized; orthanc.RestApiGet(serialized, "/instances/" + instanceId + "/metadata/" + SERIALIZED_METADATA); - std::cout << serialized; Deserialize(serialized); return; // Success } @@ -318,6 +320,7 @@ static const char* const TOTAL_WIDTH = "TotalWidth"; static const char* const TOTAL_HEIGHT = "TotalHeight"; static const char* const PHOTOMETRIC_INTERPRETATION = "PhotometricInterpretation"; + static const char* const IMAGE_TYPE = "ImageType"; void DicomPyramidInstance::Serialize(std::string& result) const @@ -344,6 +347,7 @@ content[TOTAL_WIDTH] = totalWidth_; content[TOTAL_HEIGHT] = totalHeight_; content[PHOTOMETRIC_INTERPRETATION] = Orthanc::EnumerationToString(photometric_); + content[IMAGE_TYPE] = imageType_; Orthanc::Toolbox::WriteFastJson(result, content); } @@ -371,6 +375,8 @@ std::string p = Orthanc::SerializationToolbox::ReadString(content, PHOTOMETRIC_INTERPRETATION); photometric_ = Orthanc::StringToPhotometricInterpretation(p.c_str()); + + imageType_ = Orthanc::SerializationToolbox::ReadString(content, IMAGE_TYPE); const Json::Value f = content[FRAMES]; frames_.resize(f.size()); diff -r c5a8b46c4cba -r ef3f8c5126a4 Framework/Inputs/DicomPyramidInstance.h --- a/Framework/Inputs/DicomPyramidInstance.h Tue Jan 12 16:20:57 2021 +0100 +++ b/Framework/Inputs/DicomPyramidInstance.h Tue Jan 12 17:09:57 2021 +0100 @@ -34,16 +34,17 @@ private: typedef std::pair FrameLocation; - std::string instanceId_; - bool hasCompression_; - ImageCompression compression_; - Orthanc::PixelFormat format_; - unsigned int tileWidth_; - unsigned int tileHeight_; - unsigned int totalWidth_; - unsigned int totalHeight_; - std::vector frames_; + std::string instanceId_; + bool hasCompression_; + ImageCompression compression_; + Orthanc::PixelFormat format_; + unsigned int tileWidth_; + unsigned int tileHeight_; + unsigned int totalWidth_; + unsigned int totalHeight_; + std::vector frames_; Orthanc::PhotometricInterpretation photometric_; + std::string imageType_; void Load(OrthancStone::IOrthancConnection& orthanc, const std::string& instanceId); @@ -97,6 +98,11 @@ return frames_.size(); } + const std::string& GetImageType() const + { + return imageType_; + } + unsigned int GetFrameLocationX(size_t frame) const; unsigned int GetFrameLocationY(size_t frame) const; diff -r c5a8b46c4cba -r ef3f8c5126a4 NEWS --- a/NEWS Tue Jan 12 16:20:57 2021 +0100 +++ b/NEWS Tue Jan 12 17:09:57 2021 +0100 @@ -5,6 +5,7 @@ * Allow images without "Per frame functional groups sequence" tag (0x5200,0x9230) * Better handling of PhotometricInterpretation in viewer * Fix colorspace of TIFF containing JPEG with RGB photometric interpretation (not YCbCr) +* Don't display the thumbnail/overview instances in the Web viewer * Support of dynamic linking against the system-wide Orthanc framework library