comparison OrthancServer/OrthancRestApi2.cpp @ 215:c07170f3f4f7

refactoring of access to images in REST
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 29 Nov 2012 11:25:29 +0100
parents 03817919169b
children e5d5d4a9a326
comparison
equal deleted inserted replaced
214:03817919169b 215:c07170f3f4f7
221 call.GetOutput().AnswerJson(result); 221 call.GetOutput().AnswerJson(result);
222 } 222 }
223 } 223 }
224 224
225 225
226 template <enum ImageExtractionMode mode>
227 static void GetImage(RestApi::GetCall& call)
228 {
229 RETRIEVE_CONTEXT(call);
230
231 CompressionType compressionType;
232 std::string fileUuid;
233 std::string publicId = call.GetUriComponent("id", "");
234 std::string frameId = call.GetUriComponent("frame", "0");
235
236 unsigned int frame;
237 try
238 {
239 frame = boost::lexical_cast<unsigned int>(frameId);
240 }
241 catch (boost::bad_lexical_cast)
242 {
243 return;
244 }
245
246 if (context.GetIndex().GetFile(fileUuid, compressionType, publicId, AttachedFileType_Dicom))
247 {
248 assert(compressionType == CompressionType_None);
249
250 std::string dicomContent, png;
251 context.GetFileStorage().ReadFile(dicomContent, fileUuid);
252
253 try
254 {
255 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, mode);
256 call.GetOutput().AnswerBuffer(png, "image/png");
257 }
258 catch (OrthancException&)
259 {
260 std::string root = "";
261 for (size_t i = 1; i < call.GetFullUri().size(); i++)
262 {
263 root += "../";
264 }
265
266 call.GetOutput().Redirect(root + "app/images/unsupported.png");
267 }
268 }
269 }
270
271
272
226 273
227 // DICOM bridge ------------------------------------------------------------- 274 // DICOM bridge -------------------------------------------------------------
228 275
229 static void ListModalities(RestApi::GetCall& call) 276 static void ListModalities(RestApi::GetCall& call)
230 { 277 {
275 Register("/instances/{id}/file", GetInstanceFile); 322 Register("/instances/{id}/file", GetInstanceFile);
276 Register("/instances/{id}/tags", GetInstanceTags<false>); 323 Register("/instances/{id}/tags", GetInstanceTags<false>);
277 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>); 324 Register("/instances/{id}/simplified-tags", GetInstanceTags<true>);
278 Register("/instances/{id}/frames", ListFrames); 325 Register("/instances/{id}/frames", ListFrames);
279 326
280 // TODO : "content", "frames" 327 Register("/instances/{id}/frames/{frame}/preview", GetImage<ImageExtractionMode_Preview>);
328 Register("/instances/{id}/frames/{frame}/image-uint8", GetImage<ImageExtractionMode_UInt8>);
329 Register("/instances/{id}/frames/{frame}/image-uint16", GetImage<ImageExtractionMode_UInt16>);
330 Register("/instances/{id}/preview", GetImage<ImageExtractionMode_Preview>);
331 Register("/instances/{id}/image-uint8", GetImage<ImageExtractionMode_UInt8>);
332 Register("/instances/{id}/image-uint16", GetImage<ImageExtractionMode_UInt16>);
333
334 // TODO : "content"
281 } 335 }
282 } 336 }