Mercurial > hg > orthanc
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 } |