Mercurial > hg > orthanc
comparison PalanthirServer/FromDcmtkBridge.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 |
---|---|
436 } | 436 } |
437 | 437 |
438 | 438 |
439 void FromDcmtkBridge::ExtractPngImage(std::string& result, | 439 void FromDcmtkBridge::ExtractPngImage(std::string& result, |
440 DcmDataset& dataset, | 440 DcmDataset& dataset, |
441 unsigned int frame, | |
441 ImageExtractionMode mode) | 442 ImageExtractionMode mode) |
442 { | 443 { |
443 // See also: http://support.dcmtk.org/wiki/dcmtk/howto/accessing-compressed-data | 444 // See also: http://support.dcmtk.org/wiki/dcmtk/howto/accessing-compressed-data |
444 | 445 |
445 std::auto_ptr<DicomIntegerPixelAccessor> accessor; | 446 std::auto_ptr<DicomIntegerPixelAccessor> accessor; |
453 { | 454 { |
454 Uint8* pixData = NULL; | 455 Uint8* pixData = NULL; |
455 if (e->getUint8Array(pixData) == EC_Normal) | 456 if (e->getUint8Array(pixData) == EC_Normal) |
456 { | 457 { |
457 accessor.reset(new DicomIntegerPixelAccessor(m, pixData, e->getLength())); | 458 accessor.reset(new DicomIntegerPixelAccessor(m, pixData, e->getLength())); |
459 accessor->SetCurrentFrame(frame); | |
458 } | 460 } |
459 } | 461 } |
460 | 462 |
461 PixelFormat format; | 463 PixelFormat format; |
462 switch (mode) | 464 switch (mode) |
504 } | 506 } |
505 | 507 |
506 | 508 |
507 void FromDcmtkBridge::ExtractPngImage(std::string& result, | 509 void FromDcmtkBridge::ExtractPngImage(std::string& result, |
508 const std::string& dicomContent, | 510 const std::string& dicomContent, |
511 unsigned int frame, | |
509 ImageExtractionMode mode) | 512 ImageExtractionMode mode) |
510 { | 513 { |
511 DcmInputBufferStream is; | 514 DcmInputBufferStream is; |
512 if (dicomContent.size() > 0) | 515 if (dicomContent.size() > 0) |
513 { | 516 { |
516 is.setEos(); | 519 is.setEos(); |
517 | 520 |
518 DcmFileFormat dicom; | 521 DcmFileFormat dicom; |
519 if (dicom.read(is).good()) | 522 if (dicom.read(is).good()) |
520 { | 523 { |
521 ExtractPngImage(result, *dicom.getDataset(), mode); | 524 ExtractPngImage(result, *dicom.getDataset(), frame, mode); |
522 } | 525 } |
523 else | 526 else |
524 { | 527 { |
525 throw PalanthirException(ErrorCode_BadFileFormat); | 528 throw PalanthirException(ErrorCode_BadFileFormat); |
526 } | 529 } |