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")