Mercurial > hg > orthanc-stone
comparison RenderingPlugin/Sources/Plugin.cpp @ 1883:fba6e550e0ee
apply rescale slope/intercept in rendering plugin
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 12 Jan 2022 18:26:05 +0100 |
parents | 4e80b8afd0da |
children | 0c6923982fdd |
comparison
equal
deleted
inserted
replaced
1882:4e80b8afd0da | 1883:fba6e550e0ee |
---|---|
21 | 21 |
22 | 22 |
23 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" | 23 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" |
24 | 24 |
25 #include "../../OrthancStone/Sources/Toolbox/AffineTransform2D.h" | 25 #include "../../OrthancStone/Sources/Toolbox/AffineTransform2D.h" |
26 #include "../../OrthancStone/Sources/Toolbox/DicomInstanceParameters.h" | |
26 | 27 |
27 #include <EmbeddedResources.h> | 28 #include <EmbeddedResources.h> |
28 | 29 |
29 #include <Images/Image.h> | 30 #include <Images/Image.h> |
30 #include <Images/ImageProcessing.h> | 31 #include <Images/ImageProcessing.h> |
59 static void RenderNumpyFrame(OrthancPluginRestOutput* output, | 60 static void RenderNumpyFrame(OrthancPluginRestOutput* output, |
60 const char* url, | 61 const char* url, |
61 const OrthancPluginHttpRequest* request) | 62 const OrthancPluginHttpRequest* request) |
62 { | 63 { |
63 // TODO: Parameters in GET | 64 // TODO: Parameters in GET |
64 // TODO: Rescale slope/intercept | 65 |
66 OrthancPlugins::MemoryBuffer tags; | |
67 if (!tags.RestApiGet("/instances/" + std::string(request->groups[0]) + "/tags", false)) | |
68 { | |
69 throw Orthanc::OrthancException(Orthanc::ErrorCode_InexistentItem); | |
70 } | |
71 | |
72 Json::Value json; | |
73 tags.ToJson(json); | |
74 | |
75 Orthanc::DicomMap m; | |
76 m.FromDicomAsJson(json); | |
77 | |
78 OrthancStone::DicomInstanceParameters parameters(m); | |
65 | 79 |
66 OrthancPlugins::MemoryBuffer dicom; | 80 OrthancPlugins::MemoryBuffer dicom; |
67 dicom.GetDicomInstance(request->groups[0]); | 81 dicom.GetDicomInstance(request->groups[0]); |
68 | 82 |
69 unsigned int frame = boost::lexical_cast<unsigned int>(request->groups[1]); | 83 unsigned int frame = boost::lexical_cast<unsigned int>(request->groups[1]); |
101 modified.reset(new Orthanc::Image(source.GetFormat(), source.GetWidth(), source.GetHeight(), false)); | 115 modified.reset(new Orthanc::Image(source.GetFormat(), source.GetWidth(), source.GetHeight(), false)); |
102 t.Apply(*modified, source, OrthancStone::ImageInterpolation_Nearest, true); | 116 t.Apply(*modified, source, OrthancStone::ImageInterpolation_Nearest, true); |
103 } | 117 } |
104 else | 118 else |
105 { | 119 { |
106 Orthanc::Image converted(Orthanc::PixelFormat_Float32, image.GetWidth(), image.GetHeight(), false); | 120 std::unique_ptr<Orthanc::ImageAccessor> converted(parameters.ConvertToFloat(source)); |
107 Orthanc::ImageProcessing::Convert(converted, source); | |
108 | 121 |
109 modified.reset(new Orthanc::Image(converted.GetFormat(), converted.GetWidth(), converted.GetHeight(), false)); | 122 assert(converted.get() != NULL); |
110 t.Apply(*modified, converted, OrthancStone::ImageInterpolation_Bilinear, true); | 123 modified.reset(new Orthanc::Image(converted->GetFormat(), converted->GetWidth(), converted->GetHeight(), false)); |
124 t.Apply(*modified, *converted, OrthancStone::ImageInterpolation_Bilinear, true); | |
111 } | 125 } |
112 | 126 |
113 assert(modified.get() != NULL); | 127 assert(modified.get() != NULL); |
114 | 128 |
115 std::string answer; | 129 std::string answer; |