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); }
/// <summary> /// Splits the DICOM object into chunks that are within the max PDU size /// </summary> /// <param name="dicomObject"> the DICOM objec to be split</param> /// <param name="maxPduSize">the max length (in bytes) for a PDU</param> /// <param name="asc">the association that the file will be sent</param> /// <returns></returns> private static List <byte[]> GetChunks(DICOMObject dicomObject, int maxPduSize, Association asc) { byte[] dicomBytes; using (var stream = new MemoryStream()) { using (var dw = new DICOMBinaryWriter(stream)) { DICOMObjectWriter.Write(dw, new DICOMWriteSettings { TransferSyntax = TransferSyntaxHelper.GetSyntax(asc.PresentationContexts.First().TransferSyntaxes.First()), DoWriteIndefiniteSequences = false }, dicomObject); dicomBytes = stream.ToArray(); } } var split = new List <byte[]>(); int i = 0; while (i < dicomBytes.Length) { int toTake = dicomBytes.Length >= (maxPduSize - 6) + i ? maxPduSize - 6 : dicomBytes.Length - i; byte[] fragment = dicomBytes.Skip(i).Take(toTake).ToArray(); i += fragment.Length; split.Add(fragment); } return(split); }
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]); }
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); }
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); }