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, DICOMWriteSettings.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);
        }
        public void OnRequestReceived(NActionRequest req, Association asc)
        {
            //Find it
            var txId   = req.Data.GetSelector().TransactionUID.Data;
            var found  = new List <DICOMObject>();
            var toFind = req.Data.GetSelector().ReferencedSOPSequence;

            foreach (var item in toFind.Items)
            {
                var sopClass    = item.GetSelector().ReferencedSOPClassUID.Data;
                var sopInstance = item.GetSelector().ReferencedSOPInstanceUID.Data;
                //If found, add to found list
                if (Find(sopClass, sopInstance))
                {
                    found.Add(item);
                }
            }
            //Send N-EVENT-REPORT-RQ
            var nReq = new NEventReportRequest();

            nReq.AffectedSOPClassUID    = req.RequestedSOPClassUID;
            nReq.MessageID              = req.MessageID;
            nReq.AffectedSOPInstanceUID = req.RequestedSOPInstanceUID;
            nReq.EventTypeId            = req.ActionTypeID;
            var data = new DICOMObject(DICOMForge.TransactionUID(txId),
                                       DICOMForge.ReferencedSOPSequence(found.ToArray()));

            nReq.Data = data;
            asc.OutboundMessages.Enqueue(nReq);
        }
Exemple #3
0
        public void RemoveMetaHeaderTest()
        {
            var dcm = new DICOMObject();

            dcm.Elements.Add(DICOMForge.File​Meta​Information​Group​Length(0));
            dcm.Elements.Add(DICOMForge.FileMetaInformationVersion(0));
            dcm.Elements.Add(DICOMForge.PatientID("123456"));

            dcm.RemoveMetaHeader();
            var meta = dcm.Elements.Where(e => e.Tag.Group == "0002").ToList();

            Assert.AreEqual(0, meta.Count);
        }
Exemple #4
0
 private static IEnumerable <DICOMObject> GenerateDICOMFiles()
 {
     for (int i = 0; i < 100; i++)
     {
         var dcm = new DICOMObject();
         dcm.Add(DICOMForge.SOPInstanceUID(UIDHelper.GenerateUID()));
         dcm.Add(DICOMForge.PatientID("123456"));
         dcm.Add(DICOMForge.SOPClassUID(SOPClassUID.CTImageStorage));
         dcm.Add(DICOMForge.TransferSyntaxUID(TransferSyntaxHelper.IMPLICIT_VR_LITTLE_ENDIAN));
         dcm.Add(DICOMForge.PixelData(new byte[10000]));
         yield return(dcm);
     }
 }
Exemple #5
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 Anonymize(DICOMObject d)
        {
            EvilLogger.Instance.Log("Anonymizing patient identity...", 0);
            //PATIENTS NAME
            var name = DICOMForge.PatientName();

            name.FirstName = FirstName;
            name.LastName  = LastName;
            d.ReplaceOrAdd(name);

            //PATIENT ID
            var id = DICOMForge.PatientID();

            id.Data = Id;
            d.ReplaceOrAdd(id);
        }
Exemple #7
0
        public void PatientIdReplaceTest()
        {
            var dcm = DICOMFileReader.Read(Resources.explicitLittleEndian);
            var sel = dcm.GetSelector();

            sel.PatientID             = DICOMForge.PatientID();
            sel.PatientID.Data        = "12345";
            sel.PatientName.LastName  = "Flinstone";
            sel.PatientName.FirstName = "Fred";

            var anon = new PatientIdAnonymizer("Homer", "Simpson", "678910");

            anon.Anonymize(dcm);

            Assert.AreEqual(sel.PatientID.Data, "678910");
            Assert.AreEqual(sel.PatientName.LastName, "Simpson");
            Assert.AreEqual(sel.PatientName.FirstName, "Homer");
        }
Exemple #8
0
        private static StorageCommitmentRequest CreateRequest(Dictionary <string, string> dictionary)
        {
            var scr    = new StorageCommitmentRequest();
            var refSeq = DICOMForge.ReferencedPerformedProcedureStepSequence(
                new DICOMObject(DICOMForge.ReferencedSOPClassUID("1.2.840.10008.3.1.2.3.3"),
                                DICOMForge.ReferencedSOPInstanceUID(UIDHelper.GenerateUID())));
            var txId     = DICOMForge.TransactionUID(UIDHelper.GenerateUID());
            var seqItems = new List <DICOMObject>();

            foreach (var entry in dictionary)
            {
                seqItems.Add(new DICOMObject(DICOMForge.ReferencedSOPClassUID(entry.Key),
                                             DICOMForge.ReferencedSOPInstanceUID(entry.Value)));
            }
            var refSeq2 = DICOMForge.ReferencedSOPSequence(seqItems.ToArray());

            scr.Data = new DICOMObject(refSeq, txId, refSeq2);
            return(scr);
        }
        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]);

        }
Exemple #10
0
        /// <summary>
        ///     Sets the transfer syntax of the DICOM object. The purpose of this is to go from an enum to a string.
        /// </summary>
        /// <param name="dicom">the DICOM object to set syntax</param>
        /// <param name="selector">the transfer syntax to set</param>
        public static void SetSyntax(DICOMObject dicom, TransferSyntax selector)
        {
            var syntax = DICOMForge.TransferSyntaxUID();

            if (syntax != null)
            {
                var transferSyntax = string.Empty;
                switch (selector)
                {
                case TransferSyntax.EXPLICIT_VR_BIG_ENDIAN:
                    transferSyntax = EXPLICIT_VR_BIG_ENDIAN;
                    break;

                case TransferSyntax.EXPLICIT_VR_LITTLE_ENDIAN:
                    transferSyntax = EXPLICIT_VR_LITTLE_ENDIAN;
                    break;

                case TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN:
                    transferSyntax = IMPLICIT_VR_LITTLE_ENDIAN;
                    break;

                case TransferSyntax.JPEG_2000:
                    transferSyntax = JPEG_2000;
                    break;

                case TransferSyntax.JPEG_2000_LOSSLESS:
                    transferSyntax = JPEG_2000_LOSSLESS;
                    break;

                case TransferSyntax.JPEG_BASELINE:
                    transferSyntax = JPEG_BASELINE;
                    break;

                case TransferSyntax.JPEG_EXTENDED:
                    transferSyntax = JPEG_EXTENDED;
                    break;

                case TransferSyntax.JPEG_LOSSLESS_14:
                    transferSyntax = JPEG_LOSSLESS_14;
                    break;

                case TransferSyntax.JPEG_LOSSLESS_14_S1:
                    transferSyntax = JPEG_LOSSLESS_14_S1;
                    break;

                case TransferSyntax.JPEG_LOSSLESS_15:
                    transferSyntax = JPEG_LOSSLESS_15;
                    break;

                case TransferSyntax.JPEG_LS_LOSSLESS:
                    transferSyntax = JPEG_LS_LOSSLESS;
                    break;

                case TransferSyntax.JPEG_LS_NEAR_LOSSLESS:
                    transferSyntax = JPEG_LS_NEAR_LOSSLESS;
                    break;

                case TransferSyntax.JPEG_PROGRESSIVE:
                    transferSyntax = JPEG_PROGRESSIVE;
                    break;

                case TransferSyntax.RLE_LOSSLESS:
                    transferSyntax = RLE_LOSSLESS;
                    break;

                default:
                    transferSyntax = IMPLICIT_VR_LITTLE_ENDIAN;
                    break;
                }
                syntax.Data = transferSyntax;
                dicom.ReplaceOrAdd(syntax);
            }
        }