Mercurial > hg > orthanc
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 } |