DICOM-rs 0.6.0
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
totransfer-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
forpixeldata::Error
(#323) - [core] several changes were made to
DicomValue
for ergonomics (#353, #376, #390)- Type parameter
P
(inDicomValue
and inDataElement
) now has a default ofVec<u8>
, which is more convenient DicomValue
now uses independent sequence typesDataSetSequence
andPixelFragmentSequence
- Changed
PartialEq
implementation ofDicomValue
between data set items, which now ignores the items' recorded length - Fixed the error type returned for some of the conversion methods
- Type parameter
- [parser]
LazyDataSetReader::next
has been renamed toadvance
(#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]>
andPartialEq<(u16, u16)>
forTag
were removed (#389)- Developers should prefer converting
u16
pairs to aTag
first.
- Developers should prefer converting
- [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.
- Attribute operations include
- [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!
)
- Submitting new transfer syntaxes has been made easier: no need to add
- [transfer-syntax-registry] Support for encoding to JPEG baseline (#286 @Almeida-a)
Fixes
- [ul] Add
SopClassExtendedNegotiationSubItem
forPdu
(#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!
withoutsmallvec
import (#366) - [object] Reset length in
InMemDicomObject
toUNDEFINED
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
withowo-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.0dicom-encoding
0.6.0dicom-dictionary-std
0.6.0dicom-parser
0.6.0dicom-transfer-syntax-registry
0.6.0dicom-ul
0.5.0dicom-scpproxy
0.5.0dicom-object
0.6.0dicom-dump
0.6.0dicom-pixeldata
0.2.0dicom
0.6.0dicom-echoscu
0.3.0dicom-storescu
0.3.0dicom-storescp
0.2.0dicom-findscu
0.2.0dicom-toimage
0.2.0dicom-fromimage
0.2.0dicom-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