DICOM-rs 0.8.0
This is a major release of DICOM-rs, boasting an ample collection of new capabilities. Highlights are async support for network applications (via Tokio), and support for a bunch of new transfer syntaxes, including the brand new one for JPEG XL!
Images in JPEG-LS, High Throughput JPEG 2000 (HTJ2K), and JPEG XL can now be decoded, and pixel data can be encoded to JPEG-LS and JPEG XL Lossless.
Changes
- A minimal Rust compiler version policy is now implemented (#587 @qarmin)
- 1.72.0 is the minimum version supported by all library crates with the default features. Binary crates or additional features may affect compatibility and require a more recent version of the compiler.
- [ul,storescp,storescu] New async implementation of
dicom_ul
, with application in toolsdicom-storescu
anddicom-storescp
. (#542 @naterichman)- While the association API for synchronous I/O has not changed. there were breaking changes in the isolated PDU reading functions.
- [encoding] The expected behavior of pixel data decoding for single sample per pixel images was clarified (#593)
- [dictionary-std] Updated tags and uids (#578,#594)
- A few tag keywords have changed from the upstream source.
New
- [ts-registry] Support for JPEG-LS image decoding via CharLS (#534 @dougyau)
- [ts-registry] High-Throughput JPEG 2000 (HTJ2K) transfer syntaxes with decoding support via OpenJPEG (#499)
- [ts-registry] JPEG XL transfer syntaxes with native support for decoding via jxl-oxide and encoding via zune-jpegxl (#571)
- [ts-registry] JPEG-LS pixel data encoder via CharLS (#573)
- [ul] Add connection timeout (#569,#570 @jmlaka)
- [object] New method
FileDicomObject::update_meta
(#572) - [pixeldata] Add support for pixel-first planar configuration (#575 @abustany)
- [fromimage] Add
--encapsulate
option to encase a file in a DICOM object without converting it to native pixel data (#579) - [parser] Add configurable strategy for handling odd length data elements (#567)
- [object] Constructive operations through the attribute operations API now create nested sequences recursively, so that intermediate sequence elements do not have to be created first (#574)
Fixes
- [core] Require DICOM times to encode with the given precision even for 0 microseconds (#557)
- [object] Adjust file meta information group length calculation (#566)
- [pixeldata] Fix discrepancy between multi and single frame
decode_pixel_data
in GDCM integration (#562 @thomas-tribus) - [pixeldata] Update meta information group length in
dicom-transcode
output (#572) - [ul] Fix issues around
dicom_ul::get_client_pdu
(#590) - [scpproxy] Tweak handling of connection closed event (#590)
- Fix documentation and dictionary typos found via codespell (#558 @DimitriPapadopoulos)
Enhancements
Miscellaneous
- [parser] Recover API compatibility (#583)
- [ul] Rework API (#582,#592)
- [object,ul] Update implementation class UID and version name (#584,#591)
- Clippy linting (#580,#586)
📦 Updated crates
dicom-core
0.8.0dicom-dictionary-std
0.8.0dicom-encoding
0.8.0dicom-parser
0.8.0dicom-transfer-syntax-registry
0.8.0dicom-ul
0.8.0dicom-scpproxy
0.8.0dicom-object
0.8.0dicom-json
0.8.0dicom-dump
0.8.0dicom-pixeldata
0.8.0dicom-echoscu
0.8.0dicom-storescu
0.8.0dicom-storescp
0.8.0dicom-findscu
0.8.0dicom-toimage
0.8.0dicom-fromimage
0.8.0dicom-dictionary-builder
0.8.0dicom
0.8.0
🙏 Thanks
A word of thanks to the new DICOM-rs contributors @DimitriPapadopoulos and @abustany.
And one more word of thanks to veteran contributors @naterichman for bringing async network support to the ecosystem, and @dougyau for the integration with CharLS, which enabled JPEG-LS support.
Full Changelog: v0.7.1...v0.8.0