Пример #1
0
 internal DicomStreamReader(BufferedStreamReader input, DicomTransferSyntax transferSyntax)
 {
     Input          = input;
     TransferSyntax = transferSyntax;
     DataReader     = new BinaryDataReader(input, transferSyntax.ByteOrder);
     VRCoding       = transferSyntax.VRCoding;
 }
 internal DicomStreamWriter(BufferedStreamWriter output, DicomTransferSyntax transferSyntax)
 {
     Output         = output;
     TransferSyntax = transferSyntax;
     DataWriter     = new BinaryDataWriter(output, transferSyntax.ByteOrder);
     VRCoding       = transferSyntax.VRCoding;
 }
        internal static long GetDataElementLength(ValueRepresentation vr, DicomVRCoding vrCoding, long unpaddedValueLength)
        {
            if (unpaddedValueLength >= uint.MaxValue)
            {
                throw new ArgumentOutOfRangeException(nameof(unpaddedValueLength), $"{unpaddedValueLength} is out of 32-bit range");
            }

            var valueLength = ((unpaddedValueLength % 2) != 0) ? (uint)unpaddedValueLength + 1 : (uint)unpaddedValueLength;

            long dataElementLength = 4;

            if (vrCoding == DicomVRCoding.Explicit)
            {
                dataElementLength += 2;
                if (vr is IHas16BitExplicitVRLength)
                {
                    if (valueLength >= ushort.MaxValue)
                    {
                        throw new ArgumentOutOfRangeException(nameof(unpaddedValueLength), $"{unpaddedValueLength} is out of 16-bit range");
                    }
                    dataElementLength += 2;
                }
                else
                {
                    dataElementLength += 6;
                }
            }
            else
            {
                dataElementLength += 4;
            }

            dataElementLength += valueLength;

            return(dataElementLength);
        }