Function: serializeDicom()
serializeDicom(
ds):Buffer
Serialize a Dataset to a spec-clean DICOM Part 10 Buffer.
The dataset's transfer syntax is preserved (no transcoding): pixel-data
fragments and nested sequences are written back byte-for-byte, while scalar
values are re-emitted with correct even-length padding and File Meta group
length. Pure function - the input Dataset is never mutated.
Input contract. The writer is designed for a Dataset produced by
parseDicom: it relies on the parser's Element.rawBytes representation
(value-only for scalars and Implicit-LE defined-length SQ; full on-wire span
for Explicit SQ, undefined-length spans, encapsulated Pixel Data, and the
UN/CP-246 fallbacks). A hand-built Dataset must follow the same
convention for its bytes to be encoded correctly.
Round-trip scope. parseDicom(out) re-reads to a dataset that is equal
over the modeled surface (every dataset element + the typed
"../dataset/file-meta".FileMeta fields plus any non-modeled File Meta
elements preserved on extraElements), not a byte-exact copy of the original
file: the 128-byte preamble is normalized to zeros, the File Meta group is
rebuilt in ascending tag order (modeled fields + extraElements - see
encodeFileMeta), odd-length values are padded even, and retired
(gggg,0000) group lengths are dropped.
Parameters
ds
Returns
Buffer
Throws
DicomSerializeError with code MISSING_TRANSFER_SYNTAX when
the dataset has no File Meta Transfer Syntax UID, or
UNSUPPORTED_TRANSFER_SYNTAX when that UID is outside the v1 set.
Example
import { parseDicom, serializeDicom } from "@cosyte/dicom";
const ds = parseDicom(buf);
const out = serializeDicom(ds); // spec-clean Part 10, same transfer syntax
// parseDicom(out) re-reads to a structurally-equal dataset.