# Version 1.4.0

## Changelog

### Fixes

- Fixed handling of VRs AT and PN in json encoding (#915)

- Fixed handling of binary values in json encoding (#887)

- Prevent exception if assigning None to UI element (#894)

- Fixed print output for numeric multi-value elements (#892)

- Fixed testing PN values for truthiness (#891)

- Fixed handling of data too large to written in explicit transfer syntax

- Fixed handling of known tags with VR UN (#899, #968)

- Fixed assigning of empty values to data elements (#896)

- Fixed error in unpickling dataset (#947)

- Fixed error in pickling modified datasets (#951)

- Fixed improper conversion of the first value of the LUT Descriptor elements (0028,1101-1103) and (0028,3002) (#942)

- Fixed handling of ISO IR 159 encoding (#917)

- Fixed propagation of bulk data handler in Dataset.from_json (#971)

- Correctly handle DICOMDIR files with records in reverse-hierarchical order (#822)

- Pixel Data encoded using JPEG2000 and decoded using the Pillow handler no longer returns RGB data when the (0028,0004) Photometric Interpretation is YBR_FULL or YBR_FULL_422. (#263, #273, #826)

- Avoid possible high memory usage while reading sequences (#994)

- Fixed `generate_pixel_data()` not returning all available frames when the Basic Offset Table was empty. This may still occur when multiple fragments per frame are present for non-JPEG transfer syntaxes or where no JPEG EOI/EOC marker is present (#685)

- Fixed possible incorrect switch to explicit VR in sequence items (#999)

- Fixed JPEG 2000 (UIDs 1.2.840.10008.1.2.4.90 and 1.2.840.10008.1.2.4.91) pixel data with bit depth range 9-16 not producing the correct values with the Pillow handler (#693)

- Fixed parsing a DICOMDIR file with no records raising an exception (#1004)

### Enhancements

- Added support for converting (60xx,3000) Overlay Data to a numpy ndarray using `Dataset.overlay_array()` (#912)

- Added support for deferred reading in file-like objects (#932)

- Tolerate values with multiple and/or incorrect padding bytes (#940)

- Added support for uncompressed pixel data with (0028,0004) Photometric Interpretation of YBR_FULL_422 to the numpy pixel data handler.

- Added `apply_color_lut()` function for applying color palette LUTs (#205)

- Added `apply_modality_lut()` function for applying modality LUTs.

- Added `get_palette_files()` for retrieving well-known palette color datasets.

- Raise on end of file errors if config.enforce_valid_values is set (#277)

- Added user warning, or exception in strict mode, if a DICOMDIR has an unexpected transfer syntax (#848)

- Handle missing offset tags in DICOMDIR (#981)

- Added optional handler argument to `decompress()`. This lets you specify a particular handler, rather than following pydicom’s default order (#537)

- Added `apply_voi_lut()` function for applying VOI LUTs or windowing operations.

- Added support for (7fe0,0008) Float Pixel Data and (7fe0,0009) Double Float Pixel Data to `pixel_array` (#452)

- JPEG 2000 (1.2.840.10008.1.2.4.91) transfer syntax is supported for data with bit depth > 8 with the Pillow pixel data handler

- `PixelData.is_undefined_length` is now set automatically based on whether the Dataset’s Transfer Syntax is compressed (#1006)

- Updated DICOM dictionary to 2019e edition (#1013)

- Added support for new VRs OV, SV, UV (#1016)

- Code dictionaries and `Code` class for structured reporting added (alpha release only). See the Structured Reporting tutorial for more information

### Changes

- `get_frame_offsets()` now returns whether the Basic Offset Table is empty and a list of the offsets.