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); }
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); }
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); }
public DICOMIOSettings ToDICOMWriteSettings() { var settings = DICOMIOSettings.Default(); settings.TransferSyntax = TransferSyntaxHelper.GetSyntax(TransferSyntaxes.FirstOrDefault()); return(settings); }
public byte[] GetBytes(DICOMIOSettings settings = null) { settings = settings ?? DICOMIOSettings.Default(); using (var stream = new MemoryStream()) { DICOMFileWriter.Write(stream, settings, this); return(stream.ToArray()); } }
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); }
/// <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); }
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; } }
/// <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; } } }
/// <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]); }
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 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); }
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_); } }
public void SetGroupLength() { var bytes = GroupWriter.WriteGroupBytes(new DICOMObject(Elements), DICOMIOSettings.Default(), "0000"); GroupLength = (uint)bytes.Length; }
public void WriteAddMeta(string filePath, DICOMIOSettings settings = null) { DCM.WriteAddMeta(filePath, settings); }