Mercurial > hg > orthanc
diff OrthancServer/FromDcmtkBridge.cpp @ 863:3c0d0836f704 jpeg
refactoring
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 10 Jun 2014 17:20:33 +0200 |
parents | a546b05a43da |
children | 2c545bb20dd3 |
line wrap: on
line diff
--- a/OrthancServer/FromDcmtkBridge.cpp Sat Jun 07 10:51:28 2014 +0200 +++ b/OrthancServer/FromDcmtkBridge.cpp Tue Jun 10 17:20:33 2014 +0200 @@ -527,21 +527,45 @@ ImageExtractionMode mode) { // TODO CONTINUE THIS - if (mode == ImageExtractionMode_UInt8) + + ImageBuffer tmp; + bool ok = false; + + switch (mode) { - printf(">>>>>>>>\n"); - ImageBuffer tmp; - if (DicomImageDecoder::Decode(tmp, dataset, frame, PixelFormat_Grayscale8, DicomImageDecoder::Mode_Truncate)) - { - ImageAccessor accessor(tmp.GetAccessor()); - PngWriter writer; - writer.WriteToMemory(result, accessor); - printf("<<<<<<<< OK\n"); - return; - } - printf("<<<<<<<< FAILURE\n"); + case ImageExtractionMode_UInt8: + ok = DicomImageDecoder::DecodeAndTruncate(tmp, dataset, frame, PixelFormat_Grayscale8); + break; + + case ImageExtractionMode_UInt16: + ok = DicomImageDecoder::DecodeAndTruncate(tmp, dataset, frame, PixelFormat_Grayscale16); + break; + + case ImageExtractionMode_Int16: + ok = DicomImageDecoder::DecodeAndTruncate(tmp, dataset, frame, PixelFormat_SignedGrayscale16); + break; + + case ImageExtractionMode_Preview: + ok = DicomImageDecoder::DecodePreview(tmp, dataset, frame); + break; + + default: + throw OrthancException(ErrorCode_ParameterOutOfRange); } + if (ok) + { + ImageAccessor accessor(tmp.GetAccessor()); + PngWriter writer; + writer.WriteToMemory(result, accessor); + return; + } + else + { + throw OrthancException(ErrorCode_BadFileFormat); + } + + // See also: http://support.dcmtk.org/wiki/dcmtk/howto/accessing-compressed-data std::auto_ptr<DicomIntegerPixelAccessor> accessor;