private static DICOMElement CreateVRObject(string vr, Constants.EncodeType encType, byte[] data, Tag t, bool isLittleEndian, bool isIndefinite) { switch (vr) { case "CS": CodeString cs = new CodeString(); cs.ByteData = data; cs.EncodeType = encType; cs.IsLittleEndian = isLittleEndian; cs.Tag = t; return cs; case "SH": ShortString sh = new ShortString(); sh.ByteData = data; sh.EncodeType = encType; sh.IsLittleEndian = isLittleEndian; sh.Tag = t; return sh; case "LO": LongString lo = new LongString(); lo.ByteData = data; lo.EncodeType = encType; lo.IsLittleEndian = isLittleEndian; lo.Tag = t; return lo; case "ST": ShortText st = new ShortText(); st.ByteData = data; st.EncodeType = encType; st.IsLittleEndian = isLittleEndian; st.Tag = t; return st; case "LT": LongText lt = new LongText(); lt.ByteData = data; lt.EncodeType = encType; lt.IsLittleEndian = isLittleEndian; lt.Tag = t; return lt; case "UT": UnlimitedText ut = new UnlimitedText(); ut.ByteData = data; ut.EncodeType = encType; ut.IsLittleEndian = isLittleEndian; ut.Tag = t; return ut; case "AE": ApplicationEntity ae = new ApplicationEntity(); ae.ByteData = data; ae.EncodeType = encType; ae.IsLittleEndian = isLittleEndian; ae.Tag = t; return ae; case "PN": PersonsName pn = new PersonsName(); pn.ByteData = data; pn.EncodeType = encType; pn.IsLittleEndian = isLittleEndian; pn.Tag = t; return pn; case "UI": UniqueIdentifier ui = new UniqueIdentifier(); ui.ByteData = data; ui.EncodeType = encType; ui.IsLittleEndian = isLittleEndian; ui.Tag = t; return ui; case "DA": DateVR da = new DateVR(); da.ByteData = data; da.EncodeType = encType; da.IsLittleEndian = isLittleEndian; da.Tag = t; return da; case "TM": TimeVR tm = new TimeVR(); tm.ByteData = data; tm.EncodeType = encType; tm.IsLittleEndian = isLittleEndian; tm.Tag = t; return tm; case "DT": DateTimeVR dt = new DateTimeVR(); dt.ByteData = data; dt.EncodeType = encType; dt.IsLittleEndian = isLittleEndian; dt.Tag = t; return dt; case "AS": AgeString aSt = new AgeString(); aSt.ByteData = data; aSt.EncodeType = encType; aSt.IsLittleEndian = isLittleEndian; aSt.Tag = t; return aSt; case "IS": IntegerString iSt = new IntegerString(); iSt.ByteData = data; iSt.EncodeType = encType; iSt.IsLittleEndian = isLittleEndian; iSt.Tag = t; return iSt; case "DS": DecimalString ds = new DecimalString(); ds.ByteData = data; ds.EncodeType = encType; ds.IsLittleEndian = isLittleEndian; ds.Tag = t; return ds; case "SS": SignedShort ss = new SignedShort(); ss.ByteData = data; ss.EncodeType = encType; ss.IsLittleEndian = isLittleEndian; ss.Tag = t; return ss; case "US": UnsignedShort us = new UnsignedShort(); us.ByteData = data; us.EncodeType = encType; us.IsLittleEndian = isLittleEndian; us.Tag = t; return us; case "SL": SignedLong sl = new SignedLong(); sl.ByteData = data; sl.EncodeType = encType; sl.IsLittleEndian = isLittleEndian; sl.Tag = t; return sl; case "UL": UnsignedLong ul = new UnsignedLong(); ul.ByteData = data; ul.EncodeType = encType; ul.IsLittleEndian = isLittleEndian; ul.Tag = t; return ul; case "AT": AttributeTag at = new AttributeTag(); at.ByteData = data; at.EncodeType = encType; at.IsLittleEndian = isLittleEndian; at.Tag = t; return at; case "FL": FloatingPointSingle fl = new FloatingPointSingle(); fl.ByteData = data; fl.EncodeType = encType; fl.IsLittleEndian = isLittleEndian; fl.Tag = t; return fl; case "FD": FloatingPointDouble fd = new FloatingPointDouble(); fd.ByteData = data; fd.EncodeType = encType; fd.IsLittleEndian = isLittleEndian; fd.Tag = t; return fd; case "OB": if (t.Id == TagHelper.PIXEL_DATA) { PixelData fd1 = new PixelData(data, encType, isLittleEndian, "OB", isIndefinite); fd1.Format = isIndefinite ? FrameDataFormat.ENCAPSULATED : FrameDataFormat.NATIVE; fd1.EncodeType = encType; fd1.IsLittleEndian = isLittleEndian; fd1.Tag = t; return fd1; } else { OtherByteString ob = new OtherByteString(); ob.ByteData = data; ob.EncodeType = encType; ob.IsLittleEndian = isLittleEndian; ob.Tag = t; return ob; } case "OW": if (t.Id == TagHelper.PIXEL_DATA) { PixelData fd2 = new PixelData(data, encType, isLittleEndian, "OW", isIndefinite); fd2.Format = isIndefinite ? FrameDataFormat.ENCAPSULATED : FrameDataFormat.NATIVE; fd2.EncodeType = encType; fd2.IsLittleEndian = isLittleEndian; fd2.Tag = t; return fd2; } else { OtherWordString ow = new OtherWordString(); ow.ByteData = data; ow.EncodeType = encType; ow.IsLittleEndian = isLittleEndian; ow.Tag = t; return ow; } case "OF": OtherFloatString of = new OtherFloatString(); of.ByteData = data; of.EncodeType = encType; of.IsLittleEndian = isLittleEndian; of.Tag = t; return of; case "SQ": Sequence s = new Sequence(); s.ByteData = data; s.EncodeType = encType; s.IsLittleEndian = isLittleEndian; s.Tag = t; s.ReadChildren(); return s; default: //Case for unknown VR DICOMElement dOb = new DICOMElement(); dOb.ByteData = data; dOb.EncodeType = encType; dOb.IsLittleEndian = isLittleEndian; dOb.Tag = t; return dOb; } }