Mercurial > hg > orthanc-stone
comparison Framework/Loaders/SeriesThumbnailsLoader.cpp @ 1473:9cbc6d21ae89
SeriesThumbnailsLoader::SuccessMessage::DecodeImage(), fix static builds
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 15 Jun 2020 18:02:49 +0200 |
parents | 30deba7bc8e2 |
children | 4db187d29731 |
comparison
equal
deleted
inserted
replaced
1472:474360793956 | 1473:9cbc6d21ae89 |
---|---|
22 #include "SeriesThumbnailsLoader.h" | 22 #include "SeriesThumbnailsLoader.h" |
23 | 23 |
24 #include <DicomFormat/DicomMap.h> | 24 #include <DicomFormat/DicomMap.h> |
25 #include <DicomFormat/DicomInstanceHasher.h> | 25 #include <DicomFormat/DicomInstanceHasher.h> |
26 #include <Images/ImageProcessing.h> | 26 #include <Images/ImageProcessing.h> |
27 #include <Images/JpegReader.h> | |
27 #include <Images/JpegWriter.h> | 28 #include <Images/JpegWriter.h> |
28 #include <OrthancException.h> | 29 #include <OrthancException.h> |
29 | 30 |
30 #include <boost/algorithm/string/predicate.hpp> | 31 #include <boost/algorithm/string/predicate.hpp> |
31 | 32 |
67 if (type == SeriesThumbnailType_Image) | 68 if (type == SeriesThumbnailType_Image) |
68 { | 69 { |
69 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | 70 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); |
70 } | 71 } |
71 } | 72 } |
73 | |
74 | |
75 Orthanc::ImageAccessor* SeriesThumbnailsLoader::SuccessMessage::DecodeImage() const | |
76 { | |
77 if (GetType() != SeriesThumbnailType_Image) | |
78 { | |
79 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | |
80 } | |
81 | |
82 Orthanc::MimeType mime; | |
83 if (!Orthanc::LookupMimeType(mime, GetMime())) | |
84 { | |
85 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, | |
86 "Unsupported MIME type for thumbnail: " + GetMime()); | |
87 } | |
88 | |
89 switch (mime) | |
90 { | |
91 case Orthanc::MimeType_Jpeg: | |
92 { | |
93 std::unique_ptr<Orthanc::JpegReader> reader(new Orthanc::JpegReader); | |
94 reader->ReadFromMemory(GetEncodedImage()); | |
95 return reader.release(); | |
96 } | |
97 | |
98 default: | |
99 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, | |
100 "Cannot decode MIME type for thumbnail: " + GetMime()); | |
101 } | |
102 } | |
103 | |
72 | 104 |
73 | 105 |
74 void SeriesThumbnailsLoader::AcquireThumbnail(const DicomSource& source, | 106 void SeriesThumbnailsLoader::AcquireThumbnail(const DicomSource& source, |
75 const std::string& studyInstanceUid, | 107 const std::string& studyInstanceUid, |
76 const std::string& seriesInstanceUid, | 108 const std::string& seriesInstanceUid, |
90 assert(found->second != NULL); | 122 assert(found->second != NULL); |
91 delete found->second; | 123 delete found->second; |
92 found->second = protection.release(); | 124 found->second = protection.release(); |
93 } | 125 } |
94 | 126 |
95 ThumbnailLoadedMessage message(*this, source, studyInstanceUid, seriesInstanceUid, *thumbnail); | 127 SuccessMessage message(*this, source, studyInstanceUid, seriesInstanceUid, *thumbnail); |
96 BroadcastMessage(message); | 128 BroadcastMessage(message); |
97 } | 129 } |
98 | 130 |
99 | 131 |
100 class SeriesThumbnailsLoader::Handler : public Orthanc::IDynamicObject | 132 class SeriesThumbnailsLoader::Handler : public Orthanc::IDynamicObject |
245 } | 277 } |
246 | 278 |
247 virtual void HandleError() | 279 virtual void HandleError() |
248 { | 280 { |
249 // The DICOMweb wasn't able to generate a thumbnail, try to | 281 // The DICOMweb wasn't able to generate a thumbnail, try to |
250 // retrieve the SopClassUID tag using QIDO-RS | 282 // retrieve the SopClassUID tag using a call to "/metadata" |
251 | |
252 std::map<std::string, std::string> arguments, headers; | |
253 arguments["0020000D"] = GetStudyInstanceUid(); | |
254 arguments["0020000E"] = GetSeriesInstanceUid(); | |
255 arguments["includefield"] = "00080016"; | |
256 | 283 |
257 std::unique_ptr<IOracleCommand> command( | 284 std::unique_ptr<IOracleCommand> command( |
258 GetSource().CreateDicomWebCommand( | 285 GetSource().CreateDicomWebCommand( |
259 "/instances", arguments, headers, new DicomWebSopClassHandler( | 286 "/studies/" + GetStudyInstanceUid() + "/series/" + GetSeriesInstanceUid() + "/metadata", |
287 new DicomWebSopClassHandler( | |
260 GetLoader(), GetSource(), GetStudyInstanceUid(), GetSeriesInstanceUid()))); | 288 GetLoader(), GetSource(), GetStudyInstanceUid(), GetSeriesInstanceUid()))); |
261 GetLoader()->Schedule(command.release()); | 289 GetLoader()->Schedule(command.release()); |
262 } | 290 } |
263 }; | 291 }; |
264 | 292 |
453 height_(128) | 481 height_(128) |
454 { | 482 { |
455 } | 483 } |
456 | 484 |
457 | 485 |
458 boost::shared_ptr<IObserver> SeriesThumbnailsLoader::Factory::Create(ILoadersContext::ILock& stone) | 486 boost::shared_ptr<SeriesThumbnailsLoader> SeriesThumbnailsLoader::Create(ILoadersContext::ILock& stone, |
459 { | 487 int priority) |
460 boost::shared_ptr<SeriesThumbnailsLoader> result(new SeriesThumbnailsLoader(stone.GetContext(), priority_)); | 488 { |
489 boost::shared_ptr<SeriesThumbnailsLoader> result(new SeriesThumbnailsLoader(stone.GetContext(), priority)); | |
461 result->Register<GetOrthancImageCommand::SuccessMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); | 490 result->Register<GetOrthancImageCommand::SuccessMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); |
462 result->Register<HttpCommand::SuccessMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); | 491 result->Register<HttpCommand::SuccessMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); |
463 result->Register<OracleCommandExceptionMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); | 492 result->Register<OracleCommandExceptionMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); |
464 result->Register<OrthancRestApiCommand::SuccessMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); | 493 result->Register<OrthancRestApiCommand::SuccessMessage>(stone.GetOracleObservable(), &SeriesThumbnailsLoader::Handle); |
465 return result; | 494 return result; |