Mercurial > hg > orthanc
comparison Core/DicomParsing/DcmtkTranscoder.cpp @ 3945:0b3256c3ee14 transcoding
simplified IDicomTranscoder
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 19 May 2020 11:24:00 +0200 |
parents | aae045f802f4 |
children | 1f33ed7f82e6 |
comparison
equal
deleted
inserted
replaced
3944:aae045f802f4 | 3945:0b3256c3ee14 |
---|---|
326 | 326 |
327 return false; | 327 return false; |
328 } | 328 } |
329 | 329 |
330 | 330 |
331 | |
332 bool DcmtkTranscoder::TranscodeParsedToBuffer( | |
333 std::string& target /* out */, | |
334 bool& hasSopInstanceUidChanged /* out */, | |
335 DcmFileFormat& dicom /* in, possibly modified */, | |
336 DicomTransferSyntax targetSyntax, | |
337 bool allowNewSopInstanceUid) | |
338 { | |
339 if (dicom.getDataset() == NULL) | |
340 { | |
341 throw OrthancException(ErrorCode_InternalError); | |
342 } | |
343 | |
344 std::set<DicomTransferSyntax> tmp; | |
345 tmp.insert(targetSyntax); | |
346 | |
347 if (InplaceTranscode(hasSopInstanceUidChanged, dicom, tmp, allowNewSopInstanceUid)) | |
348 { | |
349 DicomTransferSyntax targetSyntax2; | |
350 if (FromDcmtkBridge::LookupOrthancTransferSyntax(targetSyntax2, dicom) && | |
351 targetSyntax == targetSyntax2 && | |
352 dicom.getDataset() != NULL) | |
353 { | |
354 FromDcmtkBridge::SaveToMemoryBuffer(target, *dicom.getDataset()); | |
355 return true; | |
356 } | |
357 else | |
358 { | |
359 throw OrthancException(ErrorCode_InternalError); | |
360 } | |
361 } | |
362 else | |
363 { | |
364 return false; | |
365 } | |
366 } | |
367 | |
368 | |
369 IDicomTranscoder::TranscodedDicom* DcmtkTranscoder::TranscodeToParsed( | |
370 DcmFileFormat& dicom /* in, possibly modified */, | |
371 const void* buffer /* in, same DICOM file as "dicom" */, | |
372 size_t size, | |
373 const std::set<DicomTransferSyntax>& allowedSyntaxes, | |
374 bool allowNewSopInstanceUid) | |
375 { | |
376 DicomTransferSyntax sourceSyntax; | |
377 if (!FromDcmtkBridge::LookupOrthancTransferSyntax(sourceSyntax, dicom)) | |
378 { | |
379 LOG(ERROR) << "Unsupport transfer syntax for transcoding"; | |
380 return NULL; | |
381 } | |
382 | |
383 bool hasSopInstanceUidChanged; | |
384 | |
385 if (allowedSyntaxes.find(sourceSyntax) != allowedSyntaxes.end()) | |
386 { | |
387 // No transcoding is needed | |
388 return TranscodedDicom::CreateFromExternal(dicom, false /* no change in UID */); | |
389 } | |
390 else if (InplaceTranscode(hasSopInstanceUidChanged, dicom, | |
391 allowedSyntaxes, allowNewSopInstanceUid)) | |
392 { | |
393 return TranscodedDicom::CreateFromExternal(dicom, hasSopInstanceUidChanged); | |
394 } | |
395 else | |
396 { | |
397 // Cannot transcode | |
398 return NULL; | |
399 } | |
400 } | |
401 | |
402 | |
403 bool DcmtkTranscoder::Transcode(DicomImage& target, | 331 bool DcmtkTranscoder::Transcode(DicomImage& target, |
404 bool& hasSopInstanceUidChanged /* out */, | 332 bool& hasSopInstanceUidChanged /* out */, |
405 DicomImage& source /* in, "GetParsed()" possibly modified */, | 333 DicomImage& source /* in, "GetParsed()" possibly modified */, |
406 const std::set<DicomTransferSyntax>& allowedSyntaxes, | 334 const std::set<DicomTransferSyntax>& allowedSyntaxes, |
407 bool allowNewSopInstanceUid) | 335 bool allowNewSopInstanceUid) |