comparison OrthancServer/ParsedDicomFile.cpp @ 874:87791ebc1f50

download matlab images
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 11 Jun 2014 12:23:02 +0200
parents 839be3022203
children e078ea944089 e57e08ed510f 2fd5a163776d
comparison
equal deleted inserted replaced
873:fc34356283e1 874:87791ebc1f50
80 80
81 #include "ParsedDicomFile.h" 81 #include "ParsedDicomFile.h"
82 82
83 #include "FromDcmtkBridge.h" 83 #include "FromDcmtkBridge.h"
84 #include "ToDcmtkBridge.h" 84 #include "ToDcmtkBridge.h"
85 #include "Internals/DicomImageDecoder.h"
85 #include "../Core/Toolbox.h" 86 #include "../Core/Toolbox.h"
86 #include "../Core/OrthancException.h" 87 #include "../Core/OrthancException.h"
88 #include "../Core/ImageFormats/ImageBuffer.h"
87 #include "../Core/ImageFormats/PngWriter.h" 89 #include "../Core/ImageFormats/PngWriter.h"
88 #include "../Core/Uuid.h" 90 #include "../Core/Uuid.h"
89 #include "../Core/DicomFormat/DicomString.h" 91 #include "../Core/DicomFormat/DicomString.h"
90 #include "../Core/DicomFormat/DicomNullValue.h" 92 #include "../Core/DicomFormat/DicomNullValue.h"
91 #include "../Core/DicomFormat/DicomIntegerPixelAccessor.h" 93 #include "../Core/DicomFormat/DicomIntegerPixelAccessor.h"
1212 if (!pimpl_->file_->getDataset()->insert(pixels.release(), false, false).good()) 1214 if (!pimpl_->file_->getDataset()->insert(pixels.release(), false, false).good())
1213 { 1215 {
1214 throw OrthancException(ErrorCode_InternalError); 1216 throw OrthancException(ErrorCode_InternalError);
1215 } 1217 }
1216 } 1218 }
1219
1220
1221 void ParsedDicomFile::ExtractImage(ImageBuffer& result,
1222 unsigned int frame)
1223 {
1224 DcmDataset& dataset = *pimpl_->file_->getDataset();
1225
1226 if (!DicomImageDecoder::Decode(result, dataset, frame))
1227 {
1228 throw OrthancException(ErrorCode_BadFileFormat);
1229 }
1230 }
1231
1232
1233 void ParsedDicomFile::ExtractImage(ImageBuffer& result,
1234 unsigned int frame,
1235 ImageExtractionMode mode)
1236 {
1237 DcmDataset& dataset = *pimpl_->file_->getDataset();
1238
1239 bool ok = false;
1240
1241 switch (mode)
1242 {
1243 case ImageExtractionMode_UInt8:
1244 ok = DicomImageDecoder::DecodeAndTruncate(result, dataset, frame, PixelFormat_Grayscale8);
1245 break;
1246
1247 case ImageExtractionMode_UInt16:
1248 ok = DicomImageDecoder::DecodeAndTruncate(result, dataset, frame, PixelFormat_Grayscale16);
1249 break;
1250
1251 case ImageExtractionMode_Int16:
1252 ok = DicomImageDecoder::DecodeAndTruncate(result, dataset, frame, PixelFormat_SignedGrayscale16);
1253 break;
1254
1255 case ImageExtractionMode_Preview:
1256 ok = DicomImageDecoder::DecodePreview(result, dataset, frame);
1257 break;
1258
1259 default:
1260 throw OrthancException(ErrorCode_ParameterOutOfRange);
1261 }
1262
1263 if (!ok)
1264 {
1265 throw OrthancException(ErrorCode_BadFileFormat);
1266 }
1267 }
1268
1269
1270 void ParsedDicomFile::ExtractPngImage(std::string& result,
1271 unsigned int frame,
1272 ImageExtractionMode mode)
1273 {
1274 ImageBuffer buffer;
1275 ExtractImage(buffer, frame, mode);
1276
1277 ImageAccessor accessor(buffer.GetConstAccessor());
1278 PngWriter writer;
1279 writer.WriteToMemory(result, accessor);
1280 }
1281
1217 } 1282 }