Mercurial > hg > orthanc
diff OrthancServer/Internals/DicomImageDecoder.cpp @ 1924:6c73df12ca51
New URI: "/instances/.../frames/.../raw" to access the raw frames (bypass image decoding)
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 07 Mar 2016 17:43:20 +0100 |
parents | 8b1baa2315b8 |
children | 84c7eaeb5244 |
line wrap: on
line diff
--- a/OrthancServer/Internals/DicomImageDecoder.cpp Mon Mar 07 08:29:22 2016 +0100 +++ b/OrthancServer/Internals/DicomImageDecoder.cpp Mon Mar 07 17:43:20 2016 +0100 @@ -121,7 +121,7 @@ static const DicomTag DICOM_TAG_COMPRESSION_TYPE(0x07a1, 0x1011); - static bool IsPsmctRle1(DcmDataset& dataset) + bool DicomImageDecoder::IsPsmctRle1(DcmDataset& dataset) { DcmElement* e; char* c; @@ -144,8 +144,8 @@ } - static bool DecodePsmctRle1(std::string& output, - DcmDataset& dataset) + bool DicomImageDecoder::DecodePsmctRle1(std::string& output, + DcmDataset& dataset) { // Check whether the DICOM instance contains an image encoded with // the PMSCT_RLE1 scheme. @@ -459,38 +459,24 @@ } - static DcmPixelSequence* GetPixelSequence(DcmDataset& dataset) - { - DcmElement *element = NULL; - if (!dataset.findAndGetElement(ToDcmtkBridge::Convert(DICOM_TAG_PIXEL_DATA), element).good()) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - DcmPixelData& pixelData = dynamic_cast<DcmPixelData&>(*element); - DcmPixelSequence* pixelSequence = NULL; - if (!pixelData.getEncapsulatedRepresentation - (dataset.getOriginalXfer(), NULL, pixelSequence).good() || - pixelSequence == NULL) - { - throw OrthancException(ErrorCode_BadFileFormat); - } - - return pixelSequence; - } - - ImageAccessor* DicomImageDecoder::ApplyCodec(const DcmCodec& codec, const DcmCodecParameter& parameters, DcmDataset& dataset, unsigned int frame) { + DcmPixelSequence* pixelSequence = FromDcmtkBridge::GetPixelSequence(dataset); + if (pixelSequence == NULL) + { + throw OrthancException(ErrorCode_BadFileFormat); + } + std::auto_ptr<ImageAccessor> target(CreateImage(dataset, true)); Uint32 startFragment = 0; // Default OFString decompressedColorModel; // Out DJ_RPLossless representationParameter; - OFCondition c = codec.decodeFrame(&representationParameter, GetPixelSequence(dataset), ¶meters, + OFCondition c = codec.decodeFrame(&representationParameter, + pixelSequence, ¶meters, &dataset, frame, startFragment, target->GetBuffer(), target->GetSize(), decompressedColorModel);