Skip to content

DICOM-rs 0.6.0

Compare
Choose a tag to compare
@Enet4 Enet4 released this 23 Jul 15:27
· 366 commits to master since this release

A new milestone has arrived for DICOM-rs! Version 0.6.0 brings a wide assortment of much needed changes and an interesting array of features! In the spotlight we have a new API for attribute selection and manipulation, a redesigned pixel data adapter API, constants for normative UIDs, DICOM JSON support, an SOP Class dictionary, and many new useful conversions and methods for a better development experience.

Changes

  • Pixel data adapters were moved from encoding to transfer-syntax-registry (#251)
  • [transfer-syntax-registry] Pixel data adapters in transfer syntax registry are now available behind Cargo features (#328)
  • [pixeldata] Specific capabilities have also been feature-gated: image, ndarray, rayon (#238)
  • [dictionary-std] Update tag dictionary from DCMTK, with some breaking changes (#302)
  • [dictionary-builder] The tool was moved to devtools, and now also supports DICOM UID dictionaries (#372)
  • [pixeldata] Require Send + Sync for pixeldata::Error (#323)
  • [core] several changes were made to DicomValue for ergonomics (#353, #376, #390)
    • Type parameter P (in DicomValue and in DataElement) now has a default of Vec<u8>, which is more convenient
    • DicomValue now uses independent sequence types DataSetSequence and PixelFragmentSequence
    • Changed PartialEq implementation of DicomValue between data set items, which now ignores the items' recorded length
    • Fixed the error type returned for some of the conversion methods
  • [parser] LazyDataSetReader::next has been renamed to advance (#342)
  • [object] Error types have been split for more efficiency (#344)
  • [ul] PDU association variants and association types have been changed for more versatility (#345)
  • [core] Some type name changes in the dictionary module were made (#372)
    • Primarily to make room for other kinds of dictionaries
  • [core] Impls PartialEq<[u16; 2]> and PartialEq<(u16, u16)> for Tag were removed (#389)
    • Developers should prefer converting u16 pairs to a Tag first.
  • [ul] Corrected AbortRQServiceProviderReason (#282)

New

  • [core] Extend value retrieval API for encapsulated pixel data (#339)
  • [core] Added a public prelude module for an assortment of types users are likely to import (#391)
  • [core/object] Attribute operations API, to describe operations in data and perform them onto DICOM data sets (#326, #360, #383)
    • Attribute operations include Set, SetIfMissing, Replace, Remove, PushStr, and many more.
    • Attribute selector API enables selecting elements at an arbitrary data set nesting.
  • [object] New value_at method to get values at an arbitrary data set nesting (#394)
  • [pixeldata] New encapsulation module helps build encapsulated pixel data (#312 @dougyau)
  • [core/dictionary] SOP class dictionary (#372, #379)
  • [dictionary] normative UID constant declarations now available in module uids (#372)
  • [storescp] Can now handle C-ECHO requests (#338 @PierreBou91)
  • [core] DataDictionary trait has been extended with new default methods (#357)
    • parse_tag extends DICOM tag parsing capabilities to include a look-up by keyword
  • [core] Extend value API with mutable accessors (items_mut, etc.) (#377)
  • [core] Extend data element API with an update_value method (#377)
  • [object] New command_from_element_iter constructor functions for DICOM objects (#365)
  • [parser] Extend data set reader to support peeking (#342)
  • [encoding] Extend transfer_syntax module and re-export inventory (#359)
    • Submitting new transfer syntaxes has been made easier: no need to add inventory yourself, more re-exports at crate root, and new macros are available (submit_ele_transfer_syntax!)
  • [transfer-syntax-registry] Support for encoding to JPEG baseline (#286 @Almeida-a)

Fixes

  • [ul] Add SopClassExtendedNegotiationSubItem for Pdu (#313 @jmlaka)
  • [core] Clear leading whitespaces from values with VR DS and IS (#335 @lalberge)
  • [pixeldata] Change LUT to discard high bits of pixel data sample inputs (#347)
  • [core] Fix using dicom_value! without smallvec import (#366)
  • [object] Reset length in InMemDicomObject to UNDEFINED after any modification, fixes data set writing errors (#364 @jmlaka)
  • [findscu] Do not override Query/Retrieve Level when specified by the user (#385)
  • [transfer-syntax-registry] Fix RLE decoding in cases where number of samples > 1 (#393)

Enhancements

  • Update inventory to 0.3 (#272)
  • [core] Strings can now be converted directly to DicomValue (#377)
  • [dump] Fix and improve pixel sequence printing in dicom-dump (#340)
  • [object] Detect the presence of a file preamble with ReadPreamble::Auto (#354)
  • Support parsing strings in the form "ggggeeee" to a DICOM Tag (#363)
    • This form is often used in DICOM JSON
  • [dictionary-std] Data element dictionary now recognizes group length tags and private creator tags (#367, #370)
  • [dictionary-std] Update documentation and implementation (#367)
  • [dicom] dicom_dump has been added to the parent crate (#369)
  • [dicom] new extended documentation containing a guided overview of the DICOM-rs library (#369, #386)
  • [dump] further sanitize control characters in value summary (#371)
  • [object] Optimize size of WithMetaError (#374)
  • [echoscu] Improve output in verbose mode (#384)
  • [findscu] Now supports nested attributes in C-FIND query construction (#387)
  • [findscu] Add support for modality worklist information model (#381)

Miscellaneous

  • Update rstest to 0.16 (#327)
  • Update all CLI tools to Clap v4 (#249)
  • [dump] Replace colored with owo-colors (#328)
  • [object] Remove pixeldata module from dicom-object crate (#318)
  • [core] Remove unused util module (#331)
  • [pixeldata] Fix rustc warning at DecodedPixelData::frame_data (#332)
  • Update Cargo.lock files (#341, #358)
  • Clippy lint fix (2023-06) (#355)
  • [core] Remove default Cargo features from chrono (#356)
  • [core] Fix documentation in value module (#375)
  • Update implementation class & version for DICOM-rs 0.6 (#380)
  • Clippy lint fix (2023-07, pre-0.6) (#395)
  • Update itertools to v0.11 (#396)

πŸ“¦ New crates

  • dicom-json 0.1.0

πŸ“¦ Updated crates

  • dicom-core 0.6.0
  • dicom-encoding 0.6.0
  • dicom-dictionary-std 0.6.0
  • dicom-parser 0.6.0
  • dicom-transfer-syntax-registry 0.6.0
  • dicom-ul 0.5.0
  • dicom-scpproxy 0.5.0
  • dicom-object 0.6.0
  • dicom-dump 0.6.0
  • dicom-pixeldata 0.2.0
  • dicom 0.6.0
  • dicom-echoscu 0.3.0
  • dicom-storescu 0.3.0
  • dicom-storescp 0.2.0
  • dicom-findscu 0.2.0
  • dicom-toimage 0.2.0
  • dicom-fromimage 0.2.0
  • dicom-dictionary-builder 0.4.0

πŸ™ New Contributors

A warm thank you to new contributors @dougyau for #312, @lalberge (for #335), @PierreBou91 for #338, and @Almeida-a for #286.

New Website

DICOM-rs has a new website, primarily to serve as a nicer-looking flair to the project with a quick pitch on what it contains and what it can do. More ideas to improve it are on the way! Feel free to reach out on Zulip or discussions to provide feedback on this website. The site's full source code is also available.

Full Changelog: v0.5.4...v0.6.0