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 }