예제 #1
0
        /// <summary>
        /// Write DICOM file meta information.
        /// </summary>
        /// <param name="target">Byte target subject to writing.</param>
        /// <param name="fileMetaInfo">File meta information.</param>
        /// <param name="options">Writer options.</param>
        private static Task WriteFileMetaInfoAsync(
            IByteTarget target,
            DicomDataset fileMetaInfo,
            DicomWriteOptions options)
        {
            // recalculate FMI group length as required by standard
            fileMetaInfo.RecalculateGroupLengths();

            var writer = new DicomWriter(DicomTransferSyntax.ExplicitVRLittleEndian, options, target);
            var walker = new DicomDatasetWalker(fileMetaInfo);

            return(walker.WalkAsync(writer));
        }
예제 #2
0
 /// <summary>
 /// If necessary, update dataset syntax and group lengths.
 /// </summary>
 /// <param name="syntax">Transfer syntax.</param>
 /// <param name="dataset">DICOM dataset.</param>
 /// <param name="options">Writer options.</param>
 private static void UpdateDatasetGroupLengths(
     DicomTransferSyntax syntax,
     DicomDataset dataset,
     DicomWriteOptions options)
 {
     if (options.KeepGroupLengths)
     {
         // update transfer syntax and recalculate existing group lengths
         dataset.InternalTransferSyntax = syntax;
         dataset.RecalculateGroupLengths(false);
     }
     else
     {
         // remove group lengths as suggested in PS 3.5 7.2
         //
         //	2. It is recommended that Group Length elements be removed during storage or transfer
         //	   in order to avoid the risk of inconsistencies arising during coercion of data
         //	   element values and changes in transfer syntax.
         dataset.RemoveGroupLengths();
     }
 }
예제 #3
0
 /// <summary>
 /// Initializes an instance of a <see cref="DicomFileWriter"/>.
 /// </summary>
 /// <param name="options">Writer options.</param>
 public DicomFileWriter(DicomWriteOptions options)
 {
     _options = options ?? DicomWriteOptions.Default;
 }
예제 #4
0
 public DicomWriteLengthCalculator(DicomTransferSyntax syntax, DicomWriteOptions options)
 {
     _syntax  = syntax;
     _options = options;
 }
예제 #5
0
 /// <summary>
 /// Initializes an instance of <see cref="DicomWriter"/>.
 /// </summary>
 /// <param name="syntax">Writer transfer syntax.</param>
 /// <param name="options">Writer options.</param>
 /// <param name="target">Target to which to write the DICOM object.</param>
 public DicomWriter(DicomTransferSyntax syntax, DicomWriteOptions options, IByteTarget target)
 {
     Syntax   = syntax;
     _options = options ?? DicomWriteOptions.Default;
     _target  = target;
 }