예제 #1
0
 public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     var lengthBytes = BitConverter.GetBytes(length);
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         //Length byte size depends on VR Encoding
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((ushort) length);
                 if (length > 65536) { throw new ArgumentOutOfRangeException("Length is greater than allowed for explicit VR syntax. Try using implicit VR"); }
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         Array.Reverse(lengthBytes);
     }
     dw.Write(lengthBytes);
 }
예제 #2
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings,
     IDICOMElement toWrite)
 {
     byte[] data = DataComposer.GetDataLittleEndian(toWrite);
     LengthWriter.Write(dw, vr, settings, data != null ? data.Length : 0);
     dw.Write(data != null ? data : new byte[0]);
 }
예제 #3
0
 public PDataTF(DICOMObject dicom, bool isLastItem, bool isCommandObject, PresentationContext context)
     : this()
 {
     byte[] data;
     using (var stream = new MemoryStream())
     {
         using (var dw = new DICOMBinaryWriter(stream))
         {
             var settings = new DICOMWriteSettings();
             settings.TransferSyntax = isCommandObject
                 ? TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN
                 : TransferSyntaxHelper.GetSyntax(context.TransferSyntaxes[0]);
             DICOMObjectWriter.Write(dw, settings, dicom);
             data = stream.ToArray();
         }
     }
     var frag = new PDVItemFragment();
     frag.Data = data;
     frag.IsLastItem = isLastItem;
     frag.IsCommandObject = isCommandObject;
     var item = new PDVItem();
     item.Fragment = frag;
     item.PresentationContextID = context.Id;
     Items.Add(item);
 }
예제 #4
0
        public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
        {
            var lengthBytes = new byte[0];

            if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
            {
                switch (VRDictionary.GetEncodingFromVR(vr))
                {
                case VREncoding.ExplicitLong:
                    dw.WriteNullBytes(2);
                    lengthBytes = BitConverter.GetBytes(length);
                    break;

                case VREncoding.ExplicitShort:
                    lengthBytes = BitConverter.GetBytes((ushort)length);
                    break;

                case VREncoding.Implicit:
                    lengthBytes = BitConverter.GetBytes(length);
                    break;
                }
            }
            else if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                lengthBytes = BitConverter.GetBytes(length);
                lengthBytes.Reverse();
            }
            else
            {
                //Explicit VR Little Endian
                lengthBytes = BitConverter.GetBytes(length);
            }
            dw.Write(lengthBytes);
        }
예제 #5
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings,
                                      IDICOMElement toWrite)
 {
     byte[] data = DataComposer.GetDataLittleEndian(toWrite);
     LengthWriter.Write(dw, vr, settings, data != null ? data.Length : 0);
     dw.Write(data != null ? data : new byte[0]);
 }
예제 #6
0
 public static void WriteBigEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
 {
     DICOMTagWriter.WriteBigEndian(dw, toWrite.Tag);
     VR vr = VRDictionary.GetVRFromType(toWrite);
     VRWriter.WriteVR(dw, settings, vr);
     DataWriter.WriteBigEndian(dw, vr, settings, toWrite);
 }
예제 #7
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     byte[] lengthBytes = new byte[0];
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((short)length);
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     else
     {
         lengthBytes =BitConverter.GetBytes(length);
     }
     dw.Write(lengthBytes);
 }
예제 #8
0
        public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
        {
            var lengthBytes = BitConverter.GetBytes(length);

            if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
            {
                switch (VRDictionary.GetEncodingFromVR(vr))
                {
                case VREncoding.ExplicitLong:
                    dw.WriteNullBytes(2);
                    lengthBytes = BitConverter.GetBytes(length);
                    break;

                case VREncoding.ExplicitShort:
                    lengthBytes = BitConverter.GetBytes((ushort)length);
                    if (length > 65536)
                    {
                        throw new ArgumentOutOfRangeException(
                                  "Length is greater than allowed for explicit VR syntax. Try using implicit VR");
                    }
                    break;

                case VREncoding.Implicit:
                    lengthBytes = BitConverter.GetBytes(length);
                    break;
                }
            }
            if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                Array.Reverse(lengthBytes);
            }
            dw.Write(lengthBytes);
        }
예제 #9
0
 /// <summary>
 ///     Writes DICOM file out as a file of a specified path
 /// </summary>
 /// <param name="filePath">the path to which to write the file</param>
 /// <param name="settings">the write settings</param>
 /// <param name="toWrite">the object to write</param>
 public static void Write(string filePath, DICOMWriteSettings settings, DICOMObject toWrite)
 {
     using (var fs = new FileStream(filePath, FileMode.Create))
     {
         Write(fs, settings, toWrite);
     }
 }
예제 #10
0
 /// <summary>
 ///     Writes DICOM file out as a file of a specified path
 /// </summary>
 /// <param name="filePath">the path to which to write the file</param>
 /// <param name="settings">the write settings</param>
 /// <param name="toWrite">the object to write</param>
 public static void Write(string filePath, DICOMWriteSettings settings, DICOMObject toWrite)
 {
     using (var fs = new FileStream(filePath, FileMode.Create))
     {
         Write(fs, settings, toWrite);
     }
 }
예제 #11
0
 public static void Write(DICOMBinaryWriter dw, VR vr, DICOMWriteSettings settings, int length)
 {
     var lengthBytes = BitConverter.GetBytes(length);
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         //Length byte size depends on VR Encoding
         switch (VRDictionary.GetEncodingFromVR(vr))
         {
             case VREncoding.ExplicitLong:
                 dw.WriteNullBytes(2);
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
             case VREncoding.ExplicitShort:
                 lengthBytes = BitConverter.GetBytes((ushort) length);
                 break;
             case VREncoding.Implicit:
                 lengthBytes = BitConverter.GetBytes(length);
                 break;
         }
     }
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         Array.Reverse(lengthBytes);
     }
     dw.Write(lengthBytes);
 }
예제 #12
0
        public static void WriteBigEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
        {
            DICOMTagWriter.WriteBigEndian(dw, toWrite.Tag);
            VR vr = VRDictionary.GetVRFromType(toWrite);

            VRWriter.WriteVR(dw, settings, vr);
        }
예제 #13
0
 private static void WriteIndefiniteLength(DICOMWriteSettings settings, DICOMBinaryWriter dw)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         dw.WriteNullBytes(2);
     }
     dw.Write(new byte[] {0xFF, 0xFF, 0xFF, 0xFF});
 }
예제 #14
0
 public static void WriteVR(DICOMBinaryWriter dw, DICOMWriteSettings settings, VR vr)
 {
     if (settings.TransferSyntax != TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN)
     {
         string abbreviation = VRDictionary.GetAbbreviationFromVR(vr);
         dw.Write(abbreviation);
     }
 }
예제 #15
0
 private static void WriteIndefiniteLength(DICOMWriteSettings settings, DICOMBinaryWriter dw)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         dw.WriteNullBytes(2);
     }
     dw.Write(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF });
 }
예제 #16
0
 public static void WriteVR(DICOMBinaryWriter dw, DICOMWriteSettings settings, VR vr)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         string abbreviation = VRDictionary.GetAbbreviationFromVR(vr);
         dw.Write(abbreviation);
     }
 }
예제 #17
0
 public static void WriteLittleEndian(string filePath, DICOMWriteSettings settings, DICOMObject toWrite)
 {
     using (DICOMBinaryWriter dw = new DICOMBinaryWriter(filePath))
     {
         DICOMPreambleWriter.Write(dw);
         TransferSyntaxHelper.SetSyntax(toWrite, settings.TransferSyntax);
         DICOMObjectWriter.WriteObjectLittleEndian(dw, settings, toWrite);
     }
 }
예제 #18
0
 public static void Write(string filePath, DICOMWriteSettings settings, DICOMObject toWrite)
 {
     using (DICOMBinaryWriter dw = new DICOMBinaryWriter(filePath))
     {
         DICOMPreambleWriter.Write(dw);
         TransferSyntaxHelper.SetSyntax(toWrite, settings.TransferSyntax);
         DICOMObjectWriter.WriteObjectLittleEndian(dw, settings, toWrite);
     }
 }
예제 #19
0
 public static void WriteVR(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
 {
     if (!(settings.TransferSyntax == TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN))
     {
         VR     vr           = VRDictionary.GetVRFromType(toWrite);
         string abbreviation = VRDictionary.GetAbbreviationFromVR(vr);
         dw.Write(abbreviation);
     }
 }
예제 #20
0
 public static int WriteGroup(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d, IDICOMElement el)
 {
     byte[] groupBytes = WriteGroupBytes(d, settings, el.Tag.Group);
     int length = groupBytes.Length;
     var ul = el as UnsignedLong;
     ul.SetData((uint) length);
     DICOMElementWriter.Write(dw, settings, ul);
     dw.Write(groupBytes);
     return d.Elements.Where(elm => elm.Tag.Group == ul.Tag.Group).ToList().Count - 1;
 }
예제 #21
0
 /// <summary>
 ///     Write DICOM file out (bytes) to a specified stream
 /// </summary>
 /// <param name="stream">the stream to which to write the file</param>
 /// <param name="settings">the write settings</param>
 /// <param name="toWrite">the object to write</param>
 public static void Write(Stream stream, DICOMWriteSettings settings, DICOMObject toWrite)
 {
     settings = settings ?? DICOMWriteSettings.Default();
     using (var dw = new DICOMBinaryWriter(stream))
     {
         DICOMPreambleWriter.Write(dw);
         TransferSyntaxHelper.SetSyntax(toWrite, settings.TransferSyntax);
         DICOMObjectWriter.Write(dw, settings, toWrite);
     }
 }
예제 #22
0
 /// <summary>
 ///     Write DICOM file out (bytes) to a specified stream
 /// </summary>
 /// <param name="stream">the stream to which to write the file</param>
 /// <param name="settings">the write settings</param>
 /// <param name="toWrite">the object to write</param>
 public static void Write(Stream stream, DICOMWriteSettings settings, DICOMObject toWrite)
 {
     settings = settings ?? DICOMWriteSettings.Default();
     using (var dw = new DICOMBinaryWriter(stream))
     {
         DICOMPreambleWriter.Write(dw);
         TransferSyntaxHelper.SetSyntax(toWrite, settings.TransferSyntax);
         DICOMObjectWriter.Write(dw, settings, toWrite);
     }
 }
예제 #23
0
        public static int WriteGroupLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d, IDICOMElement el)
        {
            byte[]       groupBytes = WriteGroupBytesLittleEndian(d, settings, el.Tag.Group);
            int          length     = groupBytes.Length;
            UnsignedLong ul         = el as UnsignedLong;

            ul.SetData((uint)length);
            DICOMElementWriter.WriteLittleEndian(dw, settings, ul);
            dw.Write(groupBytes);
            return(d.Elements.Where(elm => elm.Tag.Group == ul.Tag.Group).ToList().Count - 1);
        }
예제 #24
0
 public static void Write(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement el)
 {
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         WriteBigEndian(dw, settings, el);
     }
     else
     {
         WriteLittleEndian(dw, settings, el);
     }
 }
예제 #25
0
 public static void Write(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement el)
 {
     if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
     {
         WriteBigEndian(dw, settings, el);
     }
     else
     {
         WriteLittleEndian(dw, settings, el);
     }
 }
예제 #26
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
 {
     VR vr = VRDictionary.GetVRFromType(toWrite);
     if (vr == VR.Sequence)
     {
         SequenceWriter.WriteLittleEndian(dw, settings, toWrite);
     }
     else
     {
         DICOMTagWriter.WriteLittleEndian(dw, toWrite.Tag);
         VRWriter.WriteVR(dw, settings, vr);
         DataWriter.WriteLittleEndian(dw, vr, settings, toWrite);
     }
 }
예제 #27
0
        public static void WriteLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
        {
            VR vr = VRDictionary.GetVRFromType(toWrite);

            if (vr == VR.Sequence)
            {
                SequenceWriter.WriteLittleEndian(dw, settings, toWrite);
            }
            else
            {
                DICOMTagWriter.WriteLittleEndian(dw, toWrite.Tag);
                VRWriter.WriteVR(dw, settings, vr);
                DataWriter.WriteLittleEndian(dw, vr, settings, toWrite);
            }
        }
예제 #28
0
        public static byte[] WriteItemsLittleEndian(DICOMWriteSettings settings, List <DICOMObject> items)
        {
            byte[] allItemBytes;
            using (var stream = new MemoryStream())
            {
                using (var itemDw = new DICOMBinaryWriter(stream))
                {
                    foreach (var d in items)
                    {
                        WriteItemLittleEndian(itemDw, settings, d);
                    }
                }

                allItemBytes = stream.ToArray();
            }
            return(allItemBytes);
        }
예제 #29
0
        public static byte[] WriteItemsLittleEndian(DICOMWriteSettings settings, List<DICOMObject> items)
        {
            byte[] allItemBytes;
            using (var stream = new MemoryStream())
            {
                using (var itemDw = new DICOMBinaryWriter(stream))
                {
                    foreach (DICOMObject d in items)
                    {
                        WriteItemLittleEndian(itemDw, settings, d);
                    }
                }

                allItemBytes = stream.ToArray();
            }
            return allItemBytes;
        }
예제 #30
0
 public static void WriteObjectLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d)
 {
     for (int i = 0; i < d.Elements.Count; i++)
     {
         IDICOMElement      el = d.Elements[i];
         DICOMWriteSettings currentSettings = IsFileMetaGroup(el) ? settings.GetFileMetaSettings() : settings;
         if (GroupWriter.IsGroupHeader(el))
         {
             int skip = GroupWriter.WriteGroupLittleEndian(dw, currentSettings, d, el);
             i += skip;
         }
         else
         {
             DICOMElementWriter.WriteLittleEndian(dw, currentSettings, el);
         }
     }
 }
예제 #31
0
 public static void WriteObjectLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d)
 {
     for (int i = 0; i < d.Elements.Count; i++)
     {
         IDICOMElement el = d.Elements[i];
         DICOMWriteSettings currentSettings = IsFileMetaGroup(el) ? settings.GetFileMetaSettings() : settings;
         if (GroupWriter.IsGroupHeader(el))
         {
             int skip = GroupWriter.WriteGroupLittleEndian(dw, currentSettings, d, el);
             i += skip;
         }
         else
         {
             DICOMElementWriter.WriteLittleEndian(dw, currentSettings, el);
         }
     }
 }
예제 #32
0
        public static void WriteLittleEndian(string filePath, DICOMObject toWrite)
        {
            DICOMWriteSettings settings   = DICOMWriteSettings.Default();
            IDICOMElement      currentUID = toWrite.FindFirst(TagHelper.TRANSFER_SYNTAX_UID);

            if (currentUID != null)
            {
                settings.TransferSyntax = TransferSyntaxHelper.GetSyntax(currentUID);
            }

            //TODO Currently don't support BigEndian writing : switch syntax to supported
            if (settings.TransferSyntax == TransferSyntax.EXPLICIT_VR_BIG_ENDIAN)
            {
                settings.TransferSyntax = TransferSyntax.EXPLICIT_VR_LITTLE_ENDIAN;
            }

            Write(filePath, settings, toWrite);
        }
예제 #33
0
 public static void Write(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d)
 {
     for (int i = 0; i < d.Elements.Count; i++)
     {
         IDICOMElement el = d.Elements[i];
         TransferSyntaxHelper.SetSyntax(d,settings.TransferSyntax);
         DICOMWriteSettings currentSettings = IsFileMetaGroup(el) ? settings.GetFileMetaSettings() : settings;
         if (GroupWriter.IsGroupHeader(el))
         {
             int skip = GroupWriter.WriteGroup(dw, currentSettings, d, el);
             i += skip;
         }
         else
         {
             DICOMElementWriter.Write(dw, currentSettings, el);
         }
     }
 }
예제 #34
0
 public static void WriteLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
 {
     var s = toWrite as Sequence;
     DICOMTagWriter.WriteLittleEndian(dw, toWrite.Tag);
     VRWriter.WriteVR(dw, settings, VR.Sequence);
     if (settings.DoWriteIndefiniteSequences)
     {
         WriteIndefiniteLength(settings, dw);
         SequenceItemWriter.WriteItemsLittleEndian(dw, settings, s.Items);
         WriteEndOfSequenceLittleEndian(dw);
     }
     else
     {
         byte[] itemsBytes = SequenceItemWriter.WriteItemsLittleEndian(settings, s.Items);
         LengthWriter.Write(dw, VR.Sequence, settings, itemsBytes.Length);
         dw.Write(itemsBytes);
     }
 }
예제 #35
0
        public void WriteBigEndian()
        {
            var dcm = DICOMFileReader.Read(Resources.explicitLittleEndian);
            var els = dcm.Elements.Count;
            byte[] bytes;

            using (var ms = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(ms))
                {
                    var settings = new DICOMWriteSettings() { TransferSyntax = Enums.TransferSyntax.EXPLICIT_VR_BIG_ENDIAN, DoWriteIndefiniteSequences = false };
                    DICOMObjectWriter.Write(dw, settings, dcm);
                }
                bytes = ms.ToArray();
            }

            var dcm2 = DICOMFileReader.Read(bytes);
            Assert.AreEqual(dcm2.Elements.Count, els);
        }
예제 #36
0
        public static void WriteLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, IDICOMElement toWrite)
        {
            Sequence s = toWrite as Sequence;

            DICOMTagWriter.WriteLittleEndian(dw, toWrite.Tag);
            VRWriter.WriteVR(dw, settings, VR.Sequence);
            if (settings.DoWriteIndefiniteSequences)
            {
                WriteIndefiniteLength(settings, dw);
                SequenceItemWriter.WriteItemsLittleEndian(dw, settings, s.Items);
                WriteEndOfSequenceLittleEndian(dw);
            }
            else
            {
                byte[] itemsBytes = SequenceItemWriter.WriteItemsLittleEndian(settings, s.Items);
                LengthWriter.Write(dw, VR.Sequence, settings, itemsBytes.Length);
                dw.Write(itemsBytes);
            }
        }
예제 #37
0
 public static byte[] WriteGroupBytes(DICOMObject d, DICOMWriteSettings settings, string groupId)
 {
     List<IDICOMElement> groupElements = d.Elements.Where(el => el.Tag.Group == groupId).ToList();
     byte[] groupBytes;
     using (var stream = new MemoryStream())
     {
         using (var groupDW = new DICOMBinaryWriter(stream))
         {
             foreach (IDICOMElement el in groupElements)
             {
                 if (!IsGroupHeader(el))
                 {
                     DICOMElementWriter.Write(groupDW, settings, el);
                 }
             }
         }
         groupBytes = stream.ToArray();
     }
     return groupBytes;
 }
예제 #38
0
 /// <summary>
 /// Ignores the rule of writing metadata in explicit VR little endian and instead writes all elements with the passed in syntax
 /// </summary>
 /// <param name="dw"></param>
 /// <param name="settings"></param>
 /// <param name="d"></param>
 /// <param name="isSequenceItem"></param>
 public static void WriteSameSyntax(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d, bool isSequenceItem = false)
 {
     for (int i = 0; i < d.Elements.Count; i++)
     {
         IDICOMElement el = d.Elements[i];
         if (!isSequenceItem)
         {
             TransferSyntaxHelper.SetSyntax(d, settings.TransferSyntax);
         }
         if (GroupWriter.IsGroupHeader(el))
         {
             int skip = GroupWriter.WriteGroup(dw, settings, d, el);
             i += skip;
         }
         else
         {
             DICOMElementWriter.Write(dw, settings, el);
         }
     }
 }
예제 #39
0
 public static void WriteItemLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d)
 {
     DICOMTagWriter.WriteLittleEndian(dw, TagHelper.Item);
     using (var stream = new MemoryStream())
     {
         using (var itemDw = new DICOMBinaryWriter(stream))
         {
             DICOMObjectWriter.Write(itemDw, settings, d, true);
             if (!settings.DoWriteIndefiniteSequences)
             {
                 LengthWriter.Write(dw, VR.Null, settings, (int)stream.Length);
                 dw.Write(stream.ToArray());
             }
             else
             {
                 WriteIndefiniteLittleEndian(dw, stream.ToArray());
             }
         }
     }
 }
예제 #40
0
 public static void WriteItemLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d)
 {
     DICOMTagWriter.WriteLittleEndian(dw, TagHelper.SEQUENCE_ITEM);
     using (var stream = new MemoryStream())
     {
         using (var itemDw = new DICOMBinaryWriter(stream))
         {
             DICOMObjectWriter.Write(itemDw, settings, d);
             if (!settings.DoWriteIndefiniteSequences)
             {
                 LengthWriter.Write(dw, VR.Null, settings, (int) stream.Length);
                 dw.Write(stream.ToArray());
             }
             else
             {
                 WriteIndefiniteLittleEndian(dw, stream.ToArray());
             }
         }
     }
 }
예제 #41
0
        public static byte[] WriteGroupBytes(DICOMObject d, DICOMWriteSettings settings, string groupId)
        {
            var groupElements = d.Elements.Where(el => el.Tag.Group == groupId).ToList();

            byte[] groupBytes;
            using (var stream = new MemoryStream())
            {
                using (var groupDW = new DICOMBinaryWriter(stream))
                {
                    foreach (var el in groupElements)
                    {
                        if (!IsGroupHeader(el))
                        {
                            DICOMElementWriter.Write(groupDW, settings, el);
                        }
                    }
                }
                groupBytes = stream.ToArray();
            }
            return(groupBytes);
        }
예제 #42
0
        private static byte[] WriteGroupBytesLittleEndian(DICOMObject d, DICOMWriteSettings settings, string groupID)
        {
            List <IDICOMElement> groupElements = d.Elements.Where(el => el.Tag.Group == groupID).ToList();

            byte[] groupBytes;
            using (MemoryStream stream = new MemoryStream())
            {
                using (DICOMBinaryWriter groupDW = new DICOMBinaryWriter(stream))
                {
                    foreach (IDICOMElement el in groupElements)
                    {
                        if (!IsGroupHeader(el))
                        {
                            DICOMElementWriter.WriteLittleEndian(groupDW, settings, el);
                        }
                    }
                }
                groupBytes = stream.ToArray();
            }
            return(groupBytes);
        }
예제 #43
0
 public static void Write(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d,
                          bool isSequenceItem = false)
 {
     for (var i = 0; i < d.Elements.Count; i++)
     {
         var el = d.Elements[i];
         if (!isSequenceItem)
         {
             TransferSyntaxHelper.SetSyntax(d, settings.TransferSyntax);
         }
         var currentSettings = IsFileMetaGroup(el) ? settings.GetFileMetaSettings() : settings;
         if (GroupWriter.IsGroupHeader(el))
         {
             var skip = GroupWriter.WriteGroup(dw, currentSettings, d, el);
             i += skip;
         }
         else
         {
             DICOMElementWriter.Write(dw, currentSettings, el);
         }
     }
 }
예제 #44
0
 public static void WriteItemsLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings,
                                           List <DICOMObject> items)
 {
     dw.Write(WriteItemsLittleEndian(settings, items));
 }
예제 #45
0
 public static void WriteItemLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings, DICOMObject d)
 {
 }
예제 #46
0
 public static void WriteItemsLittleEndian(DICOMBinaryWriter dw, DICOMWriteSettings settings,
     List<DICOMObject> items)
 {
     dw.Write(WriteItemsLittleEndian(settings, items));
 }