Mercurial > hg > orthanc
diff 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 |
line wrap: on
line diff
--- a/PalanthirServer/PalanthirRestApi.cpp Fri Sep 07 12:53:38 2012 +0200 +++ b/PalanthirServer/PalanthirRestApi.cpp Mon Sep 10 15:17:02 2012 +0200 @@ -568,30 +568,82 @@ else if (uri.size() == 3 && uri[0] == "instances" && - (uri[2] == "preview" || - uri[2] == "image-uint8" || - uri[2] == "image-uint16")) + uri[2] == "frames") + { + Json::Value instance(Json::objectValue); + existingResource = index_.GetInstance(instance, uri[1]); + + if (existingResource) + { + result = Json::arrayValue; + + unsigned int numberOfFrames = 1; + try + { + Json::Value tmp = instance["MainDicomTags"]["NumberOfFrames"]; + numberOfFrames = boost::lexical_cast<unsigned int>(tmp.asString()); + } + catch (boost::bad_lexical_cast) + { + } + + for (unsigned int i = 0; i < numberOfFrames; i++) + { + result.append(i); + } + } + } + + + else if (uri[0] == "instances" && + ((uri.size() == 3 && + (uri[2] == "preview" || + uri[2] == "image-uint8" || + uri[2] == "image-uint16")) || + (uri.size() == 5 && + uri[2] == "frames" && + (uri[4] == "preview" || + uri[4] == "image-uint8" || + uri[4] == "image-uint16")))) { std::string uuid; existingResource = index_.GetDicomFile(uuid, uri[1]); + std::string action = uri[2]; + + unsigned int frame = 0; + if (existingResource && + uri.size() == 5) + { + // Access to multi-frame image + action = uri[4]; + try + { + frame = boost::lexical_cast<unsigned int>(uri[3]); + } + catch (boost::bad_lexical_cast) + { + existingResource = false; + } + } + if (existingResource) { std::string dicomContent, png; storage_.ReadFile(dicomContent, uuid); try { - if (uri[2] == "preview") + if (action == "preview") { - FromDcmtkBridge::ExtractPngImage(png, dicomContent, ImageExtractionMode_Preview); + FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_Preview); } - else if (uri[2] == "image-uint8") + else if (action == "image-uint8") { - FromDcmtkBridge::ExtractPngImage(png, dicomContent, ImageExtractionMode_UInt8); + FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_UInt8); } - else if (uri[2] == "image-uint16") + else if (action == "image-uint16") { - FromDcmtkBridge::ExtractPngImage(png, dicomContent, ImageExtractionMode_UInt16); + FromDcmtkBridge::ExtractPngImage(png, dicomContent, frame, ImageExtractionMode_UInt16); } else {