DICOM and pixel support
v0.4.1 separates object discovery from display capability. A recognized DICOM object can be renderable, metadata-only, or controlled unsupported without making the wider scan or server unusable.
File support states
Section titled “File support states”| State | Meaning |
|---|---|
renderable |
The current pixel layout and transfer syntax have a supported display path. |
metadata_only |
The object remains available for tags and references, but no display frame is available. |
unsupported |
The object has pixels, but the current syntax, numeric layout, geometry, or photometric interpretation is outside the display contract. |
The registry includes a stable machine-readable support reason where applicable. A frame request for missing pixels returns 404. Unsupported transfer syntaxes, and display requests for layouts marked unsupported, return a controlled 422 error. Decode failures are request-scoped and do not stop later requests.
Transfer syntax paths
Section titled “Transfer syntax paths”Every supported syntax is decoded on the server and returned to the browser as a PNG; the viewer never relies on the browser to decode compressed DICOM fragments. Since v0.4.1, a compressed frame is decoded only when its own compressed data declares the image the DICOM header describes (rows, columns, samples per pixel, and a sample depth that fits Bits Allocated); a frame that declares another image is a decode failure for that frame, and the file’s other frames still display.
| Transfer syntax | v0.4.1 display behavior |
|---|---|
| Implicit VR Little Endian, Explicit VR Little Endian, Explicit VR Big Endian, Deflated Explicit VR Little Endian | 1/8/16/32-bit monochrome integers, float, double float, RGB, YBR_FULL, YBR_FULL_422, and palette color. |
JPEG Baseline (1.2.840.10008.1.2.4.50) |
Decoded server-side, including the decoder’s own YCbCr conversion. |
JPEG Lossless (.57, .70) |
Grayscale and 8-bit RGB; YBR_FULL components are converted to RGB. |
JPEG 2000 Lossless (.90) |
Decoded server-side. |
JPEG-LS Lossless (.80) |
8- or 16-bit grayscale through statically linked CharLS. |
JPEG XL Lossless (.110) |
8-bit RGB and YBR_RCT, which the decoder returns as RGB; YBR_FULL is converted to RGB. |
RLE Lossless (1.2.840.10008.1.2.5) |
8/16-bit monochrome, 8-bit RGB, YBR_FULL, full-resolution YBR_FULL_422 shown as YBR_FULL, and palette color. |
Deflated Image Frame Compression (1.2.840.10008.1.2.8.1) |
One-bit monochrome frames, such as binary segmentations. |
JPEG Extended (.51), JPEG 2000 lossy (.91), JPEG-LS Near-Lossless (.81), JPEG XL variants (.111, .112), and every other syntax, including HTJ2K, are controlled unsupported and return 422.
RLE 16-bit byte planes must follow the standard most-significant-byte-first order; reversed-plane encodings are not guessed.
Presentation pipeline
Section titled “Presentation pipeline”For supported grayscale layouts, v0.4.1 applies stored-bit interpretation, the Modality LUT or rescale slope/intercept, then a VOI LUT or window, then MONOCHROME1 inversion. Modality and VOI LUTs with 8- or 16-bit entries are supported. Pixel padding is excluded from automatic windows and drawn black.
Window selection follows this order: full dynamic range, an explicit window, the DICOM Window Center and Width, then a current-frame 1st/99th percentile fallback. Integer Modality values use DICOM LINEAR windowing with a minimum width of one. Float samples, fractional Modality values, and real-world windows use the exact continuous window function, including widths below one.
Display shutters mask the image outside their opening. Rectangular, circular, polygonal, and bitmap shutters are supported alone or combined, and the opening is the intersection of every declared shape. The fill is the Shutter Presentation Value, else the Shutter Presentation Color CIELab Value, else black. Color frames take the same shutter with a color fill, and enhanced multiframe objects use each frame’s own Frame Display Shutter. Standalone one-bit overlay planes are drawn last.
Pixel aspect ratio is derived from Pixel Spacing when possible, then Pixel Aspect Ratio. For supported 8-bit RGB paths, a valid source ICC profile is preserved in the PNG as metadata; this is not a numeric color-management transform.
Browser and server rendering
Section titled “Browser and server rendering”The browser windows every single-channel frame up to 20 megapixels from its decoded samples, reproducing the Modality and VOI LUTs, and draws the server’s shutter and overlay layer above the image. The result matches the server’s display frame for the same window. Color frames and larger frames use server-rendered PNGs; dragging the window over a larger frame shows server-rendered previews during the drag.
Real-world values
Section titled “Real-world values”dcmview reads declared value mappings for every modality and uses them for the pixel readout, real-world window/level, and colorwash overlays:
- the Modality transform, such as HU for CT;
- Real World Value Mappings, linear or LUT, from the frame’s own functional group, the shared group, or the top-level sequence, in that order of preference;
- mappings from separate Real World Value Mapping instances in the loaded file set that reference the image, after the file’s own mappings; and
- RT Dose Grid Scaling, reported in Gy or the declared Dose Units.
The stored pixel values themselves are not rewritten. A real-world value is a declared conversion that the viewer displays; it does not establish quantitative or clinical validity.
Object-family behavior
Section titled “Object-family behavior”- Classic, enhanced, visible-light, ordinary multiframe, and qualified RT Image objects use generic pixel inspection when their pixel layout is supported.
- SEG, Parametric Map, and RT Dose default to stored-pixel preview with separate declared semantic context. RT Dose and Parametric Map volumes can also be drawn as colorwash overlays on the images they cover.
- WSI shows decoded, positioned individual tiles; it does not stitch a Total Pixel Matrix.
- Grayscale and Color Softcopy Presentation States have no pixels of their own. Their graphic and text annotations in image pixel units can be drawn on the images they reference; nothing else of the state is applied.
- Other presentation states, registrations, structured reports, key objects, waveforms, encapsulated documents, and non-image RT objects can remain available for metadata and reference navigation without an inferred renderer.
- DICOMDIR is recognized and skipped. The file-set hierarchy is not parsed.
Known limitations
Section titled “Known limitations”- VOI LUT Function (0028,1056), including
LINEAR_EXACTandSIGMOID, is not interpreted. The exact continuous window used for non-integer samples and real-world units does not imply support for this attribute. - A window in the unit of a LUT mapping, or of a mapping behind a Modality LUT, is exact in browser rendering and in server-rendered frames such as cine only for 8-bit, 16-bit, and one-bit single-sample frames. For other frames the server uses the frame’s default window instead, and the viewer displays that default window.
- Color frames are not windowed. Raw samples are not available for multi-component JPEG 2000 frames, so the pixel readout reports their value as unavailable.
- Only the annotations of a softcopy presentation state are applied. Its window, shutter, LUTs, displayed area, and rotation or flip are not. Objects in DISPLAY units are counted and not drawn, and MATRIX units, line and fill styles, and text reading direction are not interpreted.
- Semantic geometry is conservative, WSI shows positioned tiles only, and DICOMDIR hierarchies are not parsed.
- Display masking (
--mask) is not de-identification. It does not reach pixels, free text inside kept values such as descriptions, or folder and file names in the Directory view and the exported ROI CSV. See display masking. - Redaction boxes are not saved or loaded. They are lost when the viewer exits and are not part of the ROI export.
Compatibility evidence
Section titled “Compatibility evidence”v0.4.0 and v0.4.1 record no new broad compatibility campaign. v0.4.0 does not change decoding or presentation; v0.4.1 refuses compressed frames whose data disagrees with their header and otherwise decodes as before. The most recent recorded campaign, frozen on 2026-08-28 for v0.2.11, exercised 169 valid objects, one legacy object, 15 negative cases, 139 stress files, and 24,465 deterministic fuzz target operations without crashes, timeouts, unacceptable outcomes, or failed required assertions. v0.3.0, v0.3.1, and v0.3.2 change decoding and presentation beyond that campaign’s scope, including new color paths, shutters, real-world windows, presentation state annotations, and redaction boxes, so treat it as historical evidence rather than qualification of this release.
The campaign is compatibility evidence for research inspection, not a DICOM conformance certificate.
See semantic objects and WSI for the difference between pixel preview and declared context.