Example #1
0
        private static Value[] ReadUShort(ReaderState state)
        {
            var length = ReadLength(state);
            var count = length / 2;

            var output = new Value[count];
            for (var i = 0; i < count; i++)
            {
                output[i] = new Value { Long = state.Reader.ReadUInt16() };
            }

            return output;
        }
Example #2
0
        private static Element ReadElement(ReaderState state, ushort groupId, ushort elementId)
        {
            var combinedId = ElementTag.GetCombinedId(groupId, elementId);
            state.IsImplicitVr = state.UseImplicitVr && (groupId != 0x0002);
            if (!state.IsImplicitVr && groupId != 0xfffe) // Sequence items are always implicit - hence 0xfffe.
            {
                state.ExplicitVr = new string(state.Reader.ReadChars(2));
            }

            // Always use Implicit VR if the tag is recognized in the dictionary.
            var vr = ValueTypes.Unknown;
            if (Dictionary.ContainsKey(combinedId))
            {
                var elementTag = Dictionary[combinedId];
                vr = elementTag.VR;
                Logger.Debug(elementTag.Name);
            }

            var value = new Value[0];
            switch (vr)
            {
                case ValueTypes.String:
                    value = ReadString(state);
                    break;
                case ValueTypes.DoubleString:
                    value = ReadDoubleString(state);
                    break;
                case ValueTypes.UShort:
                    value = ReadUShort(state);
                    break;
                case ValueTypes.Bytes:
                    value = ReadBytes(state);
                    break;
                case ValueTypes.Item:
                    value = ReadItem(state);
                    break;
                case ValueTypes.Separator:
                    value = ReadSeparator(state);
                    break;
                default:
                    ReadUnknown(state);
                    break;
            }

            // TransferSyntaxUID - See if implicit is specified. We hate implicit because shit cannot always be understood!
            state.UseImplicitVr = (combinedId == ReverseDictionary["TransferSyntaxUID"]) && (value[0].Text == "1.2.840.10008.1.2");
            var tag = Dictionary.ContainsKey(combinedId) ? Dictionary[combinedId] : null;

            return new Element()
            {
                GroupId = groupId,
                ElementId = elementId,
                Value = value,
                Tag = tag
            };
        }
Example #3
0
        private static Value[] ReadString(ReaderState state)
        {
            var length = ReadLength(state);
            var chars = state.Reader.ReadChars((int)length);
            var text = new string(chars);
            var values = text.Split('\\');

            var output = new Value[values.Length];
            for (var i = 0; i < output.Length; i++)
            {
                var value = values[i];
                while (value.EndsWith("\0"))
                {
                    value = value.Substring(0, value.Length - 1);
                }
                output[i] = new Value { Text = value };
            }

            return output;
        }
Example #4
0
        private static Value[] ReadDoubleString(ReaderState state)
        {
            var values = ReadString(state);
            var output = new Value[values.Length];
            for (var i = 0; i < values.Length; i++)
            {
                output[i] = new Value { Double = double.Parse(values[i].Text, NumberFormatInfo.InvariantInfo) };
            }

            return output;
        }