Mercurial > hg > orthanc
comparison OrthancServer/OrthancRestApi.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 |
---|---|
370 output.SendMethodNotAllowedError("GET,POST"); | 370 output.SendMethodNotAllowedError("GET,POST"); |
371 return; | 371 return; |
372 } | 372 } |
373 } | 373 } |
374 | 374 |
375 | |
376 // Get the DICOM or the JSON file of one instance --------------------------- | |
377 | |
378 else if (uri[0] == "instances" && | |
379 ((uri.size() == 3 && | |
380 (uri[2] == "preview" || | |
381 uri[2] == "image-uint8" || | |
382 uri[2] == "image-uint16")) || | |
383 (uri.size() == 5 && | |
384 uri[2] == "frames" && | |
385 (uri[4] == "preview" || | |
386 uri[4] == "image-uint8" || | |
387 uri[4] == "image-uint16")))) | |
388 { | |
389 std::string uuid; | |
390 CompressionType compressionType; | |
391 existingResource = index_.GetFile(uuid, compressionType, uri[1], AttachedFileType_Dicom); | |
392 | |
393 std::string action = uri[2]; | |
394 | |
395 unsigned int frame = 0; | |
396 if (existingResource && | |
397 uri.size() == 5) | |
398 { | |
399 // Access to multi-frame image | |
400 action = uri[4]; | |
401 try | |
402 { | |
403 frame = boost::lexical_cast<unsigned int>(uri[3]); | |
404 } | |
405 catch (boost::bad_lexical_cast) | |
406 { | |
407 existingResource = false; | |
408 } | |
409 } | |
410 | |
411 if (existingResource) | |
412 { | |
413 std::string dicomContent, png; | |
414 storage_.ReadFile(dicomContent, uuid); | |
415 try | |
416 { | |
417 if (action == "preview") | |
418 { | |
419 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_Preview); | |
420 } | |
421 else if (action == "image-uint8") | |
422 { | |
423 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_UInt8); | |
424 } | |
425 else if (action == "image-uint16") | |
426 { | |
427 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_UInt16); | |
428 } | |
429 else | |
430 { | |
431 throw OrthancException(ErrorCode_InternalError); | |
432 } | |
433 | |
434 output.AnswerBufferWithContentType(png, "image/png"); | |
435 return; | |
436 } | |
437 catch (OrthancException&) | |
438 { | |
439 std::string root = ""; | |
440 for (size_t i = 1; i < uri.size(); i++) | |
441 { | |
442 root += "../"; | |
443 } | |
444 | |
445 output.Redirect(root + "app/images/unsupported.png"); | |
446 return; | |
447 } | |
448 } | |
449 } | |
450 | |
451 | |
452 // DICOM bridge ------------------------------------------------------------- | 375 // DICOM bridge ------------------------------------------------------------- |
453 | 376 |
454 if ((uri.size() == 2 || | 377 if ((uri.size() == 2 || |
455 uri.size() == 3) && | 378 uri.size() == 3) && |
456 uri[0] == "modalities") | 379 uri[0] == "modalities") |