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)