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); }
public void RemoveMetaHeaderTest() { var dcm = new DICOMObject(); dcm.Elements.Add(DICOMForge.FileMetaInformationGroupLength(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); }
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); } }
/// <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); }
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"); }
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]); }
/// <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); } }