Mercurial > hg > orthanc-wsi
comparison Applications/Dicomizer.cpp @ 199:a1c265cb2174
replacing deprecated std::auto_ptr by std::unique_ptr
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Mon, 06 Jul 2020 16:29:41 +0200 |
parents | f299c191cd76 |
children | 2a4e1f7de5ab |
comparison
equal
deleted
inserted
replaced
198:2d3fe6967894 | 199:a1c265cb2174 |
---|---|
31 #include "../Framework/Inputs/TiledPyramidStatistics.h" | 31 #include "../Framework/Inputs/TiledPyramidStatistics.h" |
32 #include "../Framework/MultiThreading/BagOfTasksProcessor.h" | 32 #include "../Framework/MultiThreading/BagOfTasksProcessor.h" |
33 #include "../Framework/Outputs/DicomPyramidWriter.h" | 33 #include "../Framework/Outputs/DicomPyramidWriter.h" |
34 #include "../Framework/Outputs/TruncatedPyramidWriter.h" | 34 #include "../Framework/Outputs/TruncatedPyramidWriter.h" |
35 | 35 |
36 #include <Compatibility.h> // For std::unique_ptr | |
36 #include <DicomParsing/FromDcmtkBridge.h> | 37 #include <DicomParsing/FromDcmtkBridge.h> |
37 #include <Logging.h> | 38 #include <Logging.h> |
38 #include <OrthancException.h> | 39 #include <OrthancException.h> |
39 #include <SystemToolbox.h> | 40 #include <SystemToolbox.h> |
40 | 41 |
298 LOG(ERROR) << "Cannot parse the JSON file in: " << path; | 299 LOG(ERROR) << "Cannot parse the JSON file in: " << path; |
299 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | 300 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
300 } | 301 } |
301 } | 302 } |
302 | 303 |
303 std::auto_ptr<DcmDataset> dataset(Orthanc::FromDcmtkBridge::FromJson(json, true, true, Orthanc::Encoding_Latin1, | 304 std::unique_ptr<DcmDataset> dataset(Orthanc::FromDcmtkBridge::FromJson(json, true, true, Orthanc::Encoding_Latin1, |
304 "" /* no private tag, thus no private creator */)); | 305 "" /* no private tag, thus no private creator */)); |
305 if (dataset.get() == NULL) | 306 if (dataset.get() == NULL) |
306 { | 307 { |
307 LOG(ERROR) << "Cannot convert to JSON file to a DICOM dataset: " << path; | 308 LOG(ERROR) << "Cannot convert to JSON file to a DICOM dataset: " << path; |
308 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | 309 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
357 } | 358 } |
358 | 359 |
359 | 360 |
360 { | 361 { |
361 // Construct tag "Dimension Organization Sequence" (0020,9221) | 362 // Construct tag "Dimension Organization Sequence" (0020,9221) |
362 std::auto_ptr<DcmItem> item(new DcmItem); | 363 std::unique_ptr<DcmItem> item(new DcmItem); |
363 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization); | 364 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization); |
364 | 365 |
365 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionOrganizationSequence)); | 366 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionOrganizationSequence)); |
366 | 367 |
367 if (!sequence->insert(item.release(), false, false).good() || | 368 if (!sequence->insert(item.release(), false, false).good() || |
368 !dataset.insert(sequence.release(), true /* replace */, false).good()) | 369 !dataset.insert(sequence.release(), true /* replace */, false).good()) |
369 { | 370 { |
370 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | 371 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
372 } | 373 } |
373 | 374 |
374 | 375 |
375 { | 376 { |
376 // Construct tag "Dimension Index Sequence" (0020,9222) | 377 // Construct tag "Dimension Index Sequence" (0020,9222) |
377 std::auto_ptr<DcmItem> item(new DcmItem); | 378 std::unique_ptr<DcmItem> item(new DcmItem); |
378 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization); | 379 OrthancWSI::DicomToolbox::SetStringTag(*item, DCM_DimensionOrganizationUID, organization); |
379 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence); | 380 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence); |
380 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_DimensionIndexPointer, DCM_ColumnPositionInTotalImagePixelMatrix); | 381 OrthancWSI::DicomToolbox::SetAttributeTag(*item, DCM_DimensionIndexPointer, DCM_ColumnPositionInTotalImagePixelMatrix); |
381 | 382 |
382 std::auto_ptr<DcmItem> item2(new DcmItem); | 383 std::unique_ptr<DcmItem> item2(new DcmItem); |
383 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_DimensionOrganizationUID, organization); | 384 OrthancWSI::DicomToolbox::SetStringTag(*item2, DCM_DimensionOrganizationUID, organization); |
384 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence); | 385 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_FunctionalGroupPointer, DCM_PlanePositionSlideSequence); |
385 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_DimensionIndexPointer, DCM_RowPositionInTotalImagePixelMatrix); | 386 OrthancWSI::DicomToolbox::SetAttributeTag(*item2, DCM_DimensionIndexPointer, DCM_RowPositionInTotalImagePixelMatrix); |
386 | 387 |
387 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionIndexSequence)); | 388 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_DimensionIndexSequence)); |
388 | 389 |
389 if (!sequence->insert(item.release(), false, false).good() || | 390 if (!sequence->insert(item.release(), false, false).good() || |
390 !sequence->insert(item2.release(), false, false).good() || | 391 !sequence->insert(item2.release(), false, false).good() || |
391 !dataset.insert(sequence.release(), true /* replace */, false).good()) | 392 !dataset.insert(sequence.release(), true /* replace */, false).good()) |
392 { | 393 { |
395 } | 396 } |
396 | 397 |
397 | 398 |
398 { | 399 { |
399 // Construct tag "Shared Functional Groups Sequence" (5200,9229) | 400 // Construct tag "Shared Functional Groups Sequence" (5200,9229) |
400 std::auto_ptr<DcmItem> item(new DcmItem); | 401 std::unique_ptr<DcmItem> item(new DcmItem); |
401 | 402 |
402 std::auto_ptr<DcmItem> item3(new DcmItem); | 403 std::unique_ptr<DcmItem> item3(new DcmItem); |
403 OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_OpticalPathIdentifier, opticalPathId); | 404 OrthancWSI::DicomToolbox::SetStringTag(*item3, DCM_OpticalPathIdentifier, opticalPathId); |
404 | 405 |
405 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_SharedFunctionalGroupsSequence)); | 406 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_SharedFunctionalGroupsSequence)); |
406 std::auto_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_OpticalPathIdentificationSequence)); | 407 std::unique_ptr<DcmSequenceOfItems> sequence3(new DcmSequenceOfItems(DCM_OpticalPathIdentificationSequence)); |
407 | 408 |
408 if (!sequence3->insert(item3.release(), false, false).good() || | 409 if (!sequence3->insert(item3.release(), false, false).good() || |
409 !item->insert(sequence3.release(), false, false).good() || | 410 !item->insert(sequence3.release(), false, false).good() || |
410 !sequence->insert(item.release(), false, false).good() || | 411 !sequence->insert(item.release(), false, false).good() || |
411 !dataset.insert(sequence.release(), true /* replace */, false).good()) | 412 !dataset.insert(sequence.release(), true /* replace */, false).good()) |
439 | 440 |
440 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeWidth, boost::lexical_cast<std::string>(volume.GetWidth())); | 441 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeWidth, boost::lexical_cast<std::string>(volume.GetWidth())); |
441 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeHeight, boost::lexical_cast<std::string>(volume.GetHeight())); | 442 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeHeight, boost::lexical_cast<std::string>(volume.GetHeight())); |
442 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeDepth, boost::lexical_cast<std::string>(volume.GetDepth())); | 443 OrthancWSI::DicomToolbox::SetStringTag(dataset, DCM_ImagedVolumeDepth, boost::lexical_cast<std::string>(volume.GetDepth())); |
443 | 444 |
444 std::auto_ptr<DcmItem> origin(new DcmItem); | 445 std::unique_ptr<DcmItem> origin(new DcmItem); |
445 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_XOffsetInSlideCoordinateSystem, | 446 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_XOffsetInSlideCoordinateSystem, |
446 boost::lexical_cast<std::string>(volume.GetOffsetX())); | 447 boost::lexical_cast<std::string>(volume.GetOffsetX())); |
447 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_YOffsetInSlideCoordinateSystem, | 448 OrthancWSI::DicomToolbox::SetStringTag(*origin, DCM_YOffsetInSlideCoordinateSystem, |
448 boost::lexical_cast<std::string>(volume.GetOffsetY())); | 449 boost::lexical_cast<std::string>(volume.GetOffsetY())); |
449 | 450 |
450 std::auto_ptr<DcmSequenceOfItems> sequenceOrigin(new DcmSequenceOfItems(DCM_TotalPixelMatrixOriginSequence)); | 451 std::unique_ptr<DcmSequenceOfItems> sequenceOrigin(new DcmSequenceOfItems(DCM_TotalPixelMatrixOriginSequence)); |
451 if (!sequenceOrigin->insert(origin.release(), false, false).good() || | 452 if (!sequenceOrigin->insert(origin.release(), false, false).good() || |
452 !dataset.insert(sequenceOrigin.release(), false, false).good()) | 453 !dataset.insert(sequenceOrigin.release(), false, false).good()) |
453 { | 454 { |
454 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | 455 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
455 } | 456 } |
471 if (!reader.parse(brightfield, json, false)) | 472 if (!reader.parse(brightfield, json, false)) |
472 { | 473 { |
473 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | 474 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
474 } | 475 } |
475 | 476 |
476 std::auto_ptr<DcmElement> element(Orthanc::FromDcmtkBridge::FromJson( | 477 std::unique_ptr<DcmElement> element(Orthanc::FromDcmtkBridge::FromJson( |
477 Orthanc::DicomTag(DCM_OpticalPathSequence.getGroup(), | 478 Orthanc::DicomTag(DCM_OpticalPathSequence.getGroup(), |
478 DCM_OpticalPathSequence.getElement()), | 479 DCM_OpticalPathSequence.getElement()), |
479 json, false, encoding, | 480 json, false, encoding, |
480 "" /* no private tag, thus no private creator */)); | 481 "" /* no private tag, thus no private creator */)); |
481 if (!dataset.insert(element.release()).good()) | 482 if (!dataset.insert(element.release()).good()) |
503 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | 504 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
504 } | 505 } |
505 | 506 |
506 if (!opticalPath->tagExists(DCM_ICCProfile)) | 507 if (!opticalPath->tagExists(DCM_ICCProfile)) |
507 { | 508 { |
508 std::auto_ptr<DcmOtherByteOtherWord> icc(new DcmOtherByteOtherWord(DCM_ICCProfile)); | 509 std::unique_ptr<DcmOtherByteOtherWord> icc(new DcmOtherByteOtherWord(DCM_ICCProfile)); |
509 | 510 |
510 if (!icc->putUint8Array(reinterpret_cast<const Uint8*>(profile.c_str()), profile.size()).good() || | 511 if (!icc->putUint8Array(reinterpret_cast<const Uint8*>(profile.c_str()), profile.size()).good() || |
511 !opticalPath->insert(icc.release()).good()) | 512 !opticalPath->insert(icc.release()).good()) |
512 { | 513 { |
513 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | 514 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); |
925 | 926 |
926 case OrthancWSI::ImageCompression_Tiff: | 927 case OrthancWSI::ImageCompression_Tiff: |
927 { | 928 { |
928 try | 929 try |
929 { | 930 { |
930 std::auto_ptr<OrthancWSI::HierarchicalTiff> tiff(new OrthancWSI::HierarchicalTiff(path)); | 931 std::unique_ptr<OrthancWSI::HierarchicalTiff> tiff(new OrthancWSI::HierarchicalTiff(path)); |
931 sourceCompression = tiff->GetImageCompression(); | 932 sourceCompression = tiff->GetImageCompression(); |
932 return tiff.release(); | 933 return tiff.release(); |
933 } | 934 } |
934 catch (Orthanc::OrthancException&) | 935 catch (Orthanc::OrthancException&) |
935 { | 936 { |
970 OrthancWSI::ImagedVolumeParameters volume; | 971 OrthancWSI::ImagedVolumeParameters volume; |
971 | 972 |
972 if (ParseParameters(exitStatus, parameters, volume, argc, argv)) | 973 if (ParseParameters(exitStatus, parameters, volume, argc, argv)) |
973 { | 974 { |
974 OrthancWSI::ImageCompression sourceCompression; | 975 OrthancWSI::ImageCompression sourceCompression; |
975 std::auto_ptr<OrthancWSI::ITiledPyramid> source; | 976 std::unique_ptr<OrthancWSI::ITiledPyramid> source; |
976 | 977 |
977 source.reset(OpenInputPyramid(sourceCompression, parameters.GetInputFile(), parameters)); | 978 source.reset(OpenInputPyramid(sourceCompression, parameters.GetInputFile(), parameters)); |
978 if (source.get() == NULL) | 979 if (source.get() == NULL) |
979 { | 980 { |
980 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); | 981 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadFileFormat); |
981 } | 982 } |
982 | 983 |
983 LOG(WARNING) << "Compression of the individual source tiles: " << OrthancWSI::EnumerationToString(sourceCompression); | 984 LOG(WARNING) << "Compression of the individual source tiles: " << OrthancWSI::EnumerationToString(sourceCompression); |
984 | 985 |
985 // Create the shared DICOM tags | 986 // Create the shared DICOM tags |
986 std::auto_ptr<DcmDataset> dataset(ParseDataset(parameters.GetDatasetPath())); | 987 std::unique_ptr<DcmDataset> dataset(ParseDataset(parameters.GetDatasetPath())); |
987 EnrichDataset(*dataset, *source, sourceCompression, parameters, volume); | 988 EnrichDataset(*dataset, *source, sourceCompression, parameters, volume); |
988 | 989 |
989 std::auto_ptr<OrthancWSI::IFileTarget> output(parameters.CreateTarget()); | 990 std::unique_ptr<OrthancWSI::IFileTarget> output(parameters.CreateTarget()); |
990 Recompress(*output, *source, *dataset, parameters, volume, sourceCompression); | 991 Recompress(*output, *source, *dataset, parameters, volume, sourceCompression); |
991 } | 992 } |
992 } | 993 } |
993 catch (Orthanc::OrthancException& e) | 994 catch (Orthanc::OrthancException& e) |
994 { | 995 { |