Mercurial > hg > orthanc
comparison PalanthirServer/PalanthirRestApi.cpp @ 53:293038baf8f1
access to multi-frame images
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 10 Sep 2012 15:17:02 +0200 |
parents | a15e90e5d6fc |
children |
comparison
equal
deleted
inserted
replaced
52:e0cac5540668 | 53:293038baf8f1 |
---|---|
566 } | 566 } |
567 | 567 |
568 | 568 |
569 else if (uri.size() == 3 && | 569 else if (uri.size() == 3 && |
570 uri[0] == "instances" && | 570 uri[0] == "instances" && |
571 (uri[2] == "preview" || | 571 uri[2] == "frames") |
572 uri[2] == "image-uint8" || | 572 { |
573 uri[2] == "image-uint16")) | 573 Json::Value instance(Json::objectValue); |
574 existingResource = index_.GetInstance(instance, uri[1]); | |
575 | |
576 if (existingResource) | |
577 { | |
578 result = Json::arrayValue; | |
579 | |
580 unsigned int numberOfFrames = 1; | |
581 try | |
582 { | |
583 Json::Value tmp = instance["MainDicomTags"]["NumberOfFrames"]; | |
584 numberOfFrames = boost::lexical_cast<unsigned int>(tmp.asString()); | |
585 } | |
586 catch (boost::bad_lexical_cast) | |
587 { | |
588 } | |
589 | |
590 for (unsigned int i = 0; i < numberOfFrames; i++) | |
591 { | |
592 result.append(i); | |
593 } | |
594 } | |
595 } | |
596 | |
597 | |
598 else if (uri[0] == "instances" && | |
599 ((uri.size() == 3 && | |
600 (uri[2] == "preview" || | |
601 uri[2] == "image-uint8" || | |
602 uri[2] == "image-uint16")) || | |
603 (uri.size() == 5 && | |
604 uri[2] == "frames" && | |
605 (uri[4] == "preview" || | |
606 uri[4] == "image-uint8" || | |
607 uri[4] == "image-uint16")))) | |
574 { | 608 { |
575 std::string uuid; | 609 std::string uuid; |
576 existingResource = index_.GetDicomFile(uuid, uri[1]); | 610 existingResource = index_.GetDicomFile(uuid, uri[1]); |
611 | |
612 std::string action = uri[2]; | |
613 | |
614 unsigned int frame = 0; | |
615 if (existingResource && | |
616 uri.size() == 5) | |
617 { | |
618 // Access to multi-frame image | |
619 action = uri[4]; | |
620 try | |
621 { | |
622 frame = boost::lexical_cast<unsigned int>(uri[3]); | |
623 } | |
624 catch (boost::bad_lexical_cast) | |
625 { | |
626 existingResource = false; | |
627 } | |
628 } | |
577 | 629 |
578 if (existingResource) | 630 if (existingResource) |
579 { | 631 { |
580 std::string dicomContent, png; | 632 std::string dicomContent, png; |
581 storage_.ReadFile(dicomContent, uuid); | 633 storage_.ReadFile(dicomContent, uuid); |
582 try | 634 try |
583 { | 635 { |
584 if (uri[2] == "preview") | 636 if (action == "preview") |
585 { | 637 { |
586 FromDcmtkBridge::ExtractPngImage(png, dicomContent, ImageExtractionMode_Preview); | 638 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_Preview); |
587 } | 639 } |
588 else if (uri[2] == "image-uint8") | 640 else if (action == "image-uint8") |
589 { | 641 { |
590 FromDcmtkBridge::ExtractPngImage(png, dicomContent, ImageExtractionMode_UInt8); | 642 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_UInt8); |
591 } | 643 } |
592 else if (uri[2] == "image-uint16") | 644 else if (action == "image-uint16") |
593 { | 645 { |
594 FromDcmtkBridge::ExtractPngImage(png, dicomContent, ImageExtractionMode_UInt16); | 646 FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_UInt16); |
595 } | 647 } |
596 else | 648 else |
597 { | 649 { |
598 throw PalanthirException(ErrorCode_InternalError); | 650 throw PalanthirException(ErrorCode_InternalError); |
599 } | 651 } |