Exemplo n.º 1
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 DICOMIOSettings();
                    settings.TransferSyntax = isCommandObject
                        ? TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN
                        : TransferSyntaxHelper.GetSyntax(context.TransferSyntaxes[0]);
                    DICOMObjectWriter.Write(dw, settings, dicom, true);
                    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);
        }
Exemplo n.º 2
0
        public void WriteMultipleFl()
        {
            var vssd = DICOMForge.VirtualSourceAxisDistances();

            vssd.Data_ = new System.Collections.Generic.List <float>()
            {
                2538.4199f, 2541.00f
            };
            byte[] elBytes = null;
            using (var stream = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(stream))
                {
                    DICOMElementWriter.Write(dw, DICOMIOSettings.DefaultExplicit(), vssd);
                    elBytes = stream.ToArray();
                }
            }

            AbstractElement <float> readVssd = null;

            using (var dr = new DICOMBinaryReader(elBytes))
            {
                readVssd = DICOMElementReader.ReadElementExplicitLittleEndian(dr) as AbstractElement <float>;
            }

            Assert.AreEqual(readVssd.Data_.Count, 2);
            Assert.AreEqual(readVssd.Data_[0], 2538.4199f);
            Assert.AreEqual(readVssd.Data_[1], 2541.00f);
        }
Exemplo n.º 3
0
        public void WriteBigEndianLength3()
        {
            var len = 10;

            byte[] bytes;
            using (var ms = new MemoryStream())
            {
                var             dw       = new DICOMBinaryWriter(ms);
                VR              vr       = VR.CodeString;
                DICOMIOSettings settings = new DICOMIOSettings()
                {
                    TransferSyntax = TransferSyntax.EXPLICIT_VR_BIG_ENDIAN, DoWriteIndefiniteSequences = false
                };
                var data = new byte[10];
                LengthWriter.Write(dw, vr, settings, data != null ? data.Length : 0);
                bytes = ms.ToArray();
            }

            var read = LengthReader.ReadLittleEndian(bytes);

            Assert.AreNotEqual(len, read);

            read = LengthReader.ReadBigEndian(bytes);
            Assert.AreEqual(len, read);
        }
Exemplo n.º 4
0
        public DICOMIOSettings ToDICOMWriteSettings()
        {
            var settings = DICOMIOSettings.Default();

            settings.TransferSyntax = TransferSyntaxHelper.GetSyntax(TransferSyntaxes.FirstOrDefault());
            return(settings);
        }
Exemplo n.º 5
0
 public byte[] GetBytes(DICOMIOSettings settings = null)
 {
     settings = settings ?? DICOMIOSettings.Default();
     using (var stream = new MemoryStream())
     {
         DICOMFileWriter.Write(stream, settings, this);
         return(stream.ToArray());
     }
 }
Exemplo n.º 6
0
        public DICOMObject DeepCopy(DICOMObject dcm)
        {
            DICOMObject copy = null;

            using (var ms = new MemoryStream())
            {
                DICOMFileWriter.Write(ms, DICOMIOSettings.DefaultExplicit(), dcm);
                var data = ms.ToArray();
                copy = DICOMObject.Read(data);
            }
            return(copy);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Writes DICOM object to a file
        /// </summary>
        /// <param name="file">the path to write</param>
        /// <param name="settings">the DICOM settings to write (endianness, and indefinite sequences)</param>
        public void Write(string file, DICOMIOSettings settings = null)
        {
            settings = settings ?? DICOMIOSettings.Default();
            //If image is compressed, lets not change the transfer syntax UID (so image will not be read incorrectly)
            var setSyntax = GetSelector().TransferSyntaxUID?.Data;

            if (setSyntax != null && TransferSyntaxHelper.IsCompressedImage(setSyntax))
            {
                settings.TransferSyntax = TransferSyntaxHelper.GetSyntax(setSyntax);
            }
            DICOMFileWriter.Write(file, settings, this);
        }
Exemplo n.º 8
0
 public void Save(DICOMObject dcm, DICOMIOSettings settings, string toFile)
 {
     try
     {
         EvilDICOM.Core.IO.Writing.DICOMFileWriter.Write(toFile, settings, dcm);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         throw;
     }
 }
Exemplo n.º 9
0
        /// <summary>
        /// Same function as write, but adds required metadata for file (often missing in DICOM objects transferred over a network)
        /// </summary>
        /// <param name="file">the path to write</param>
        /// <param name="settings">the DICOM settings to write (endianness, and indefinite sequences)</param>
        public void WriteAddMeta(string file, DICOMIOSettings settings = null)
        {
            var newSOP   = GetSelector().SOPInstanceUID.Data;
            var sopClass = GetSelector().SOPClassUID.Data;

            //ADD REQUIRED METADATA
            ReplaceOrAdd(DICOMForge.FileMetaInformationGroupLength(0));
            ReplaceOrAdd(DICOMForge.FileMetaInformationVersion(0));
            ReplaceOrAdd(DICOMForge.MediaStorageSOPClassUID(sopClass));
            ReplaceOrAdd(DICOMForge.MediaStorageSOPInstanceUID(newSOP));
            ReplaceOrAdd(DICOMForge.ImplementationClassUID("2.16.840.1.113883.3.7570"));
            Write(file, settings);
        }
 public void SaveToFile(string outputfileDcm)
 {
     foreach (IResultItem item in _outputPlans)
     {
         try
         {
             string fileName = outputfileDcm + "_" + item.FileName + ".dcm";
             DicomServices.Save(item.VerificationPlan, DICOMIOSettings.DefaultExplicit(), fileName);
         }
         catch (Exception e)
         {
             Console.WriteLine(e);
             throw;
         }
     }
 }
Exemplo n.º 11
0
        /// <summary>
        /// Creates a clone of this DICOM object
        /// </summary>
        /// <returns>a new copied DICOM object</returns>
        public DICOMObject Clone()
        {
            List <IDICOMElement> copy = new List <IDICOMElement>();

            foreach (var el in Elements)
            {
                using (var ms = new MemoryStream())
                {
                    using (var dw = new DICOMBinaryWriter(ms))
                    {
                        DICOMElementWriter.Write(dw, DICOMIOSettings.Default(), el);
                    }
                    using (var dr = new DICOMBinaryReader(ms.ToArray()))
                    {
                        copy.Add(DICOMElementReader.ReadElementImplicitLittleEndian(dr));
                    }
                }
            }

            return(new DICOMObject(copy));
        }
        public void CanAddMultipleStringsTest()
        {
            var dcm = new DICOMObject();
            dcm.ReplaceOrAdd(DICOMForge.ImageType("Type1", "Type2", "Type3"));

            //Memory test
            var expected = 3;
            var data = dcm.GetSelector().ImageType.Data_;
            var actual = data.Count;
            Assert.AreEqual(expected, actual);

            Assert.AreEqual("Type1", data[0]);
            Assert.AreEqual("Type2", data[1]);
            Assert.AreEqual("Type3", data[2]);


            var bytes = new byte[0];
            //Test IO
            using (var ms = new MemoryStream())
            {
                //WRITE
                using (var bw = new DICOMBinaryWriter(ms))
                {
                    DICOMObjectWriter.Write(bw, DICOMIOSettings.Default(), dcm);
                }
                bytes = ms.ToArray();
            }

            //READ
            var dcmRead = DICOMObject.Read(bytes);
            expected = 3;
            data = dcmRead.GetSelector().ImageType.Data_;
            actual = data.Count;
            Assert.AreEqual(expected, actual);

            Assert.AreEqual("Type1", data[0]);
            Assert.AreEqual("Type2", data[1]);
            Assert.AreEqual("Type3", data[2]);

        }
Exemplo n.º 13
0
        public void WriteUnknownTest()
        {
            var dcm = new DICOMObject();

            dcm.Add(new LongString(new Tag("32751000"), "Online3D"));

            var dcmBytes = new byte[0]; //Start empty

            using (var ms = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(ms))
                {
                    //Explicity
                    DICOMObjectWriter.Write(dw, DICOMIOSettings.DefaultExplicit(), dcm);
                }
                dcmBytes = ms.ToArray(); //Store to read back
            }

            var dcmBack = DICOMObject.Read(dcmBytes);

            //This passes
            Assert.IsTrue(dcmBack.FindFirst("32751000").VR == EvilDICOM.Core.Enums.VR.LongString);

            using (var ms = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(ms))
                {
                    //Implicit
                    DICOMObjectWriter.Write(dw, DICOMIOSettings.Default(), dcm);
                }
                dcmBytes = ms.ToArray(); //Store to read back
            }

            dcmBack = DICOMObject.Read(dcmBytes);
            //This fails
            Assert.IsFalse(dcmBack.FindFirst("32751000").VR == EvilDICOM.Core.Enums.VR.LongString);
        }
Exemplo n.º 14
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 DICOMIOSettings()
                    {
                        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);
        }
Exemplo n.º 15
0
        public void WriteDecimalString()
        {
            var ds = new DecimalString();

            ds.DData_ = Enumerable.Range(1, 15000).Select(i => ((double)i) + 0.005).ToList();
            ds.Tag    = new Tag("00082130");
            byte[] written;
            var    settings = DICOMIOSettings.Default();

            using (var ms = new MemoryStream())
            {
                using (var dw = new DICOMBinaryWriter(ms))
                {
                    DICOMElementWriter.Write(dw, DICOMIOSettings.Default(), ds);
                }
                written = ms.ToArray();
            }

            using (var dr = new DICOMBinaryReader(written))
            {
                var read = DICOMElementReader.ReadElementImplicitLittleEndian(dr) as DecimalString;
                CollectionAssert.AreEqual(ds.DData_, read.Data_);
            }
        }
Exemplo n.º 16
0
        public void SetGroupLength()
        {
            var bytes = GroupWriter.WriteGroupBytes(new DICOMObject(Elements), DICOMIOSettings.Default(), "0000");

            GroupLength = (uint)bytes.Length;
        }
Exemplo n.º 17
0
 public void WriteAddMeta(string filePath, DICOMIOSettings settings = null)
 {
     DCM.WriteAddMeta(filePath, settings);
 }