/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementExplicitLittleEndian(DICOMBinaryReader dr, StringEncoding enc = StringEncoding.ISO_IR_192) { var tag = TagReader.ReadLittleEndian(dr); var vr = VRReader.ReadVR(dr); return(ReadElementExplicitLittleEndian(tag, vr, dr, enc)); }
/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementExplicitLittleEndian(DICOMBinaryReader dr) { Tag tag = TagReader.ReadLittleEndian(dr); VR vr = VRReader.ReadVR(dr); return(ReadElementExplicitLittleEndian(tag, vr, dr)); }
/// <summary> /// Read explicit VR little endian up to transfer syntax element and determines transfer syntax for rest of elements /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <param name="syntax">the transfer syntax of the DICOM file</param> /// <returns>elements preceeding and including transfer syntax element</returns> public static List <IDICOMElement> ReadFileMetadata(DICOMBinaryReader dr, ref TransferSyntax syntax) { var elements = new List <IDICOMElement>(); syntax = syntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN ? syntax : TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN; while (dr.StreamPosition < dr.StreamLength) { long position = dr.StreamPosition; if (TagReader.ReadLittleEndian(dr).Group == _metaGroup) { dr.StreamPosition = position; IDICOMElement el = DICOMElementReader.ReadElementExplicitLittleEndian(dr); Tag uid = TagHelper.TRANSFER_SYNTAX_UID; if (el.Tag == uid) { syntax = TransferSyntaxHelper.GetSyntax(el); } elements.Add(el); } else { dr.StreamPosition = position; break; } } return(elements); }
/// <summary> /// Read explicit VR little endian up to transfer syntax element and determines transfer syntax for rest of elements /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <param name="syntax">the transfer syntax of the DICOM file</param> /// <returns>elements preceeding and including transfer syntax element</returns> private static List <IDICOMElement> ReadFileMetadata(DICOMBinaryReader dr, out TransferSyntax syntax) { List <IDICOMElement> elements = new List <IDICOMElement>(); syntax = TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN; while (dr.StreamPosition < dr.StreamLength) { long position = dr.StreamPosition; if (TagReader.ReadLittleEndian(dr).Group == _MetaGroup) { dr.StreamPosition = position; IDICOMElement el = DICOMElementReader.ReadElementExplicitLittleEndian(dr); if (el.Tag.CompleteID == TagHelper.TRANSFER_SYNTAX_UID.CompleteID) { syntax = TransferSyntaxHelper.GetSyntax(el); } elements.Add(el); } else { dr.StreamPosition = position; break; } } return(elements); }
/// <summary> /// Read explicit VR little endian up to transfer syntax element and determines transfer syntax for rest of elements /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <param name="syntax">the transfer syntax of the DICOM file</param> /// <returns>elements preceeding and including transfer syntax element</returns> public static List <IDICOMElement> ReadFileMetadata(DICOMBinaryReader dr, ref TransferSyntax syntax, ref StringEncoding enc) { var elements = new List <IDICOMElement>(); while (dr.StreamPosition < dr.StreamLength) { var position = dr.StreamPosition; if (TagReader.ReadLittleEndian(dr).Group == _metaGroup) { dr.StreamPosition = position; var el = DICOMElementReader.ReadElementExplicitLittleEndian(dr, enc); if (el.Tag == TagHelper.TransferSyntaxUID) { syntax = TransferSyntaxHelper.GetSyntax(el); } elements.Add(el); } else { dr.StreamPosition = position; break; } } return(elements); }
/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementExplicitBigEndian(DICOMBinaryReader dr, StringEncoding enc) { var tag = TagReader.ReadBigEndian(dr); var vr = VRReader.ReadVR(dr); var length = LengthReader.ReadBigEndian(vr, dr); var data = DataReader.ReadBigEndian(length, dr); return(ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.EXPLICIT_VR_BIG_ENDIAN, enc)); }
/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementExplicitBigEndian(DICOMBinaryReader dr) { Tag tag = TagReader.ReadBigEndian(dr); VR vr = VRReader.ReadVR(dr); int length = LengthReader.ReadBigEndian(vr, dr); byte[] data = DataReader.ReadBigEndian(length, dr); return(ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)); }
/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementExplicitLittleEndian(DICOMBinaryReader dr) { var tag = TagReader.ReadLittleEndian(dr); var vr = VRReader.Read(dr); int length = LengthReader.ReadLittleEndian(vr, dr); var data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.EXPLICIT_VR_LITTLE_ENDIAN); return(ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.EXPLICIT_VR_LITTLE_ENDIAN)); }
/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementImplicitLittleEndian(DICOMBinaryReader dr) { var tag = TagReader.ReadLittleEndian(dr); var vr = TagDictionary.GetVRFromTag(tag); int length = LengthReader.ReadLittleEndian(VR.Null, dr); var data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN); var el = ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN); return(el); }
public static void SkipElementImplicitLittleEndian(DICOMBinaryReader dr) { var tag = TagReader.ReadLittleEndian(dr); var length = LengthReader.ReadLittleEndian(VR.Null, dr); if (length != -1) { dr.Skip(length); } else { dr.Skip(SequenceReader.ReadIndefiniteLengthLittleEndian(dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)); dr.Skip(8); } }
public static void SkipElementExplicitBigEndian(DICOMBinaryReader dr) { var tag = TagReader.ReadBigEndian(dr); var vr = VRReader.ReadVR(dr); var length = LengthReader.ReadBigEndian(vr, dr); if (length != -1) { dr.Skip(length); } else { dr.Skip(SequenceReader.ReadIndefiniteLengthBigEndian(dr)); dr.Skip(8); } }
public static void SkipElementExplicitLittleEndian(DICOMBinaryReader dr) { Tag tag = TagReader.ReadLittleEndian(dr); VR vr = VRReader.ReadVR(dr); int length = LengthReader.ReadLittleEndian(vr, dr); if (length != -1) { dr.Skip(length); } else { dr.Skip(SequenceReader.ReadIndefiniteLengthLittleEndian(dr, TransferSyntax.EXPLICIT_VR_LITTLE_ENDIAN)); dr.Skip(8); } }
/// <summary> /// Reads and returns the next DICOM element starting at the current location in the DICOM binary reader /// </summary> /// <param name="dr">the binary reader which is reading the DICOM object</param> /// <returns>the next DICOM element</returns> public static IDICOMElement ReadElementImplicitLittleEndian(DICOMBinaryReader dr) { Tag tag = TagReader.ReadLittleEndian(dr); VR vr = TagDictionary.GetVRFromTag(tag); if (CheckForExplicitness(tag, dr, ref vr)) { return(ReadElementExplicitLittleEndian(tag, vr, dr)); } else { int length = LengthReader.ReadLittleEndian(VR.Null, dr); byte[] data = DataReader.ReadLittleEndian(length, dr, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN); IDICOMElement el = ElementFactory.GenerateElement(tag, vr, data, TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN); return(el); } }