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;