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 }