예제 #1
0
        public T ReadSingleValue(DicomStreamReader reader)
        {
            EnsureSingleValue <T>(reader);
            var result = reader.DataReader.Read <T>();

            reader.EndReadValue();
            return(result);
        }
예제 #2
0
        public DicomTag ReadSingleValue(DicomStreamReader reader)
        {
            EnsureSingleValue(reader, 4);
            var tag = DicomTag.ReadFrom(reader.DataReader);

            reader.EndReadValue();
            return(tag);
        }
        protected T[] ReadArray(DicomStreamReader reader)
        {
            var count = GetValueCount <T>(reader);
            var array = new T[count];

            reader.DataReader.Read <T>(array);
            reader.EndReadValue();
            return(array);
        }
예제 #4
0
        protected string ReadEntireValue(DicomStreamReader reader)
        {
            var valueLength = GetDefinedValueLength(reader);
            var bytes       = reader.Input.ReadBytes(valueLength);

            reader.EndReadValue();
            var encoding = reader.EncodedStringDecoder ?? StringDecoder.Default;

            return(encoding.Decode(this, TrimEnd(bytes)));
        }
예제 #5
0
        public DicomTag[] ReadValues(DicomStreamReader reader)
        {
            var count = GetValueCount(reader, 4);
            var array = new DicomTag[count];

            for (var i = 0; i < count; i++)
            {
                array[i] = DicomTag.ReadFrom(reader.DataReader);
            }
            reader.EndReadValue();
            return(array);
        }
예제 #6
0
        internal string ReadEntireValue(DicomStreamReader reader)
        {
            var valueLength      = GetDefinedValueLength(reader);
            var bytes            = reader.Input.ReadBytes(valueLength);
            var significantBytes = StripNonSignificantBytes(bytes);
            var value            = Encoding.ASCII.GetString(significantBytes);

            if (reader.CurrentTag == DicomTag.SpecificCharacterSet)
            {
                reader.ApplySpecfificCharacterSet(value.Split('\\'));
            }
            reader.EndReadValue();
            return(value);
        }
예제 #7
0
        public override byte[] ReadValue(DicomStreamReader reader)
        {
            if (reader.ValueLength < uint.MaxValue)
            {
                var result = reader.Input.ReadBytes(reader.ValueLength);
                reader.EndReadValue();
                return(result);
            }
            else
            {
                var chunks = new List <byte[]>();

                while (reader.TryReadItemTagOfSequenceWithUndefinedLength())
                {
                    if (reader.ValueLength < uint.MaxValue)
                    {
                        var chunk = reader.Input.ReadBytes(reader.ValueLength);
                        reader.EndReadValue();
                        chunks.Add(chunk);
                    }
                    else
                    {
                        throw new NotSupportedException("Cannot read chunks with undefined length");
                    }
                }

                var         totalLength = chunks.Sum(chunk => chunk.LongLength);
                var         byteArray   = new byte[totalLength];
                Span <byte> copyWindow  = byteArray;
                foreach (var chunk in chunks)
                {
                    chunk.CopyTo(copyWindow);
                    copyWindow = copyWindow.Slice(chunk.Length);
                }
                return(byteArray);
            }
        }