public void Save_ToFile_FileExistsOnDisk() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); Assert.True(File.Exists(fileName)); }
public void ConvertToJson() { var testDir = Path.Combine(TestDirPath, "convertToJson"); JsonDicomConverter jsonConverter = new JsonDicomConverter( ); Directory.CreateDirectory(testDir); foreach (string file in Directory.GetFiles(DicomHelpers.GetSampleImagesFolder( ))) { string fullPath = Path.Combine(testDir, Path.GetFileName(file)); fo.DicomDataset sourceDS = fo.DicomFile.Open(file).Dataset; jsonConverter.WriteInlineBinary = true; string sourceJsonDicom = jsonConverter.Convert(sourceDS); System.IO.File.WriteAllText(fullPath + ".jsn", sourceJsonDicom); fo.DicomDataset targetDs = jsonConverter.Convert(sourceJsonDicom); var dsF = new fo.DicomFile(targetDs); dsF.Save(fullPath + ".jsn.dcm"); string destJsonDicom = jsonConverter.Convert(targetDs); System.IO.File.WriteAllText(fullPath + ".gen.jsn", destJsonDicom); Assert.AreEqual(sourceJsonDicom, destJsonDicom); } }
private static byte[] SerializeDicom_(DicomDataset dataset) { var stream = new MemoryStream(); var file = new DicomFile(dataset); file.Save(stream); return stream.ToArray(); }
public void BeginOpen_FromFile_YieldsValidDicomFile() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); var openFile = DicomFile.EndOpen(DicomFile.BeginOpen(fileName, null, null)); var expected = MinimumDatasetInstanceUid; var actual = openFile.Dataset.Get<string>(DicomTag.SOPInstanceUID); Assert.Equal(expected, actual); }
protected override void Upload(fo.DicomDataset dicomDataset, int frame, IStorageLocation location) { fo.DicomFile df = new fo.DicomFile(dicomDataset); using (Stream stream = new MemoryStream()) { df.Save(stream); stream.Position = 0; location.Upload(stream); } }
public void Open_FromFile_YieldsValidDicomFile() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); var openFile = DicomFile.Open(fileName); var expected = MinimumDatasetInstanceUid; var actual = openFile.Dataset.Get <string>(DicomTag.SOPInstanceUID); Assert.Equal(expected, actual); }
public async Task OpenAsync_FromFile_YieldsValidDicomFile() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); var openFile = await DicomFile.OpenAsync(fileName); var expected = MinimumDatasetInstanceUid; var actual = openFile.Dataset.Get <string>(DicomTag.SOPInstanceUID); Assert.Equal(expected, actual); IOHelper.DeleteIfExists(fileName); }
public void Open_StreamOfMemoryMappedFile_YieldsValidDicomFile() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); using (var file = MemoryMappedFile.CreateFromFile(fileName)) using (var stream = file.CreateViewStream()) { var openFile = DicomFile.Open(stream); var expected = MinimumDatasetInstanceUid; var actual = openFile.Dataset.Get <string>(DicomTag.SOPInstanceUID); Assert.Equal(expected, actual); } IOHelper.DeleteIfExists(fileName); }
public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained() { var expected = "Händer Å Fötter"; var tag = DicomTag.DoseComment; var dataset = new DicomDataset(MinimumDatatset); dataset.Add(new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected)); var outFile = new DicomFile(dataset); var stream = new MemoryStream(); outFile.Save(stream); stream.Seek(0, SeekOrigin.Begin); var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192")); var actual = inFile.Dataset.Get<string>(tag); Assert.Equal(expected, actual); }
public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained() { var expected = "Händer Å Fötter"; var tag = DicomTag.DoseComment; var dataset = new DicomDataset( new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.RTDoseStorage), new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"), new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected)); var outFile = new DicomFile(dataset); var stream = new MemoryStream(); outFile.Save(stream); stream.Seek(0, SeekOrigin.Begin); var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192")); var actual = inFile.Dataset.Get<string>(tag); Assert.Equal(expected, actual); }
public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained() { var expected = "Händer Å Fötter"; var tag = DicomTag.DoseComment; var dataset = new DicomDataset( new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.RTDoseStorage), new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"), new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected)); var outFile = new DicomFile(dataset); var stream = new MemoryStream(); outFile.Save(stream); stream.Seek(0, SeekOrigin.Begin); var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192")); var actual = inFile.Dataset.Get <string>(tag); Assert.Equal(expected, actual); }
public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained() { var expected = "Händer Å Fötter"; var tag = DicomTag.DoseComment; var dataset = new DicomDataset(MinimumDatatset); dataset.Add(new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected)); var outFile = new DicomFile(dataset); var stream = new MemoryStream(); outFile.Save(stream); stream.Seek(0, SeekOrigin.Begin); var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192")); var actual = inFile.Dataset.Get <string>(tag); Assert.Equal(expected, actual); }
public void ConvertToXml( ) { var testDir = Path.Combine(TestDirPath, "convertToXml"); var xmlConverter = new XmlDicomConverter( ) { WriteInlineBinary = true }; Directory.CreateDirectory(testDir); //fo.DicomDataset sourceDS = Helper.GetDicomDataset ( 10 ).Clone ( fo.DicomTransferSyntax.ExplicitVRLittleEndian ) ; foreach (string file in Directory.GetFiles(DicomHelpers.GetSampleImagesFolder( ))) { string fullPath = Path.Combine(testDir, Path.GetFileName(file)); fo.DicomDataset sourceDS = fo.DicomFile.Open(file).Dataset; var sourceXmlDicom = xmlConverter.Convert(sourceDS); System.IO.File.WriteAllText(fullPath + ".xml", sourceXmlDicom); fo.DicomDataset targetDs = xmlConverter.Convert(sourceXmlDicom); var dsF = new fo.DicomFile(targetDs); dsF.FileMetaInfo.TransferSyntax = fo.DicomTransferSyntax.Parse(targetDs.Get(fo.DicomTag.TransferSyntaxUID, targetDs.InternalTransferSyntax.ToString( ))); dsF.Save(fullPath + ".gen.dcm"); var destXmlDicom = xmlConverter.Convert(targetDs); System.IO.File.WriteAllText(fullPath + ".gen.xml", destXmlDicom); //private tags with private creator will cause this to fail //VR for OW change to OB Assert.AreEqual(sourceXmlDicom, destXmlDicom); } }
private void CreateDicomFile(int[] frameIdArray, string directoryName, string fileName) { int frameId = frameIdArray[0]; int fileId = ObjectContext.DicomFrame.Single(x => x.FrameId == frameId).FileId; var query1 = from dev in ObjectContext.DicomElementValue.Include("DicomElement") where dev.FileId == fileId && (dev.GroupNumber != 40 && dev.GroupNumber != 32736) // Okrem GroupNumber 0x0028 a 0x7FE0 select new { dev.GroupNumber, dev.ElementNumber, dev.Value, dev.DicomElement.ValueRepresentation }; DicomDataset dataset = new DicomDataset(); foreach (var item in query1) { if (item.ValueRepresentation == "PN") { var x = new DicomPersonName(new DicomTag((ushort) item.GroupNumber, (ushort) item.ElementNumber), Encoding.UTF7, item.Value); dataset.Add(x); } else { dataset.Add(new DicomTag((ushort)item.GroupNumber, (ushort)item.ElementNumber), item.Value); } } var query2 = from dev in ObjectContext.DicomElementValue where dev.FileId == fileId && dev.GroupNumber == 40 // GroupNumber 0x0028 select new { dev.GroupNumber, dev.ElementNumber, dev.Value }; DicomPixelData pixelData = DicomPixelData.Create(dataset, true); pixelData.BitsAllocated = ushort.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 256)).Value); pixelData.BitsStored = ushort.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 257)).Value); pixelData.HighBit = ushort.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 258)).Value); pixelData.PhotometricInterpretation = PhotometricInterpretation.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 4)).Value); pixelData.PixelRepresentation = (PixelRepresentation)int.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 259)).Value); pixelData.PlanarConfiguration = (PlanarConfiguration)int.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 6)).Value); pixelData.SamplesPerPixel = ushort.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 2)).Value); ushort width = ushort.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 17)).Value); ushort height = ushort.Parse(query2.Single(x => (x.GroupNumber == 40 && x.ElementNumber == 16)).Value); var query3 = from dfr in ObjectContext.DicomFrame where frameIdArray.Contains(dfr.FrameId) orderby dfr.FrameId ascending select new { dfr.Frame }; foreach (var item in query3) { byte[] pixels = item.Frame; MemoryByteBuffer buffer = new MemoryByteBuffer(pixels); pixelData.Width = width; pixelData.Height = height; pixelData.AddFrame(buffer); } string dirPath = HttpRuntime.AppDomainAppPath + @"\temp\" + directoryName; string filePath = dirPath + @"\" + fileName + ".dcm"; if (!Directory.Exists(dirPath)) Directory.CreateDirectory(dirPath); var file = new Dicom.DicomFile(dataset); file.Save(filePath); }
private void OnClickSave(object sender, EventArgs e) { var sfd = new SaveFileDialog(); sfd.Filter = "DICOM (*.dcm)|*.dcm|Image (*.bmp;*.jpg;*.png;*.gif)|*.bmp;*.jpg;*.png;*.gif"; if (sfd.ShowDialog() == DialogResult.Cancel) return; if (sfd.FilterIndex == 1) { var file = new DicomFile(_file.Dataset); file.Save(sfd.FileName); } else { var image = new DicomImage(_file.Dataset); image.RenderImage().Save(sfd.FileName); } }
/*This button loops through the already created xml file filled with * the tags to be anonymized. The list is populated with these specific * tags to be anonymized, and we then search through the DICOM file * and "remove" any information that corresponds to the information in the * list. This "removed" patient information is passed to the crosswalk table for later reference */ private void Anonymize_Click(object sender, EventArgs e) { /*when an element in the taglist matches a tag in the dicom file, remove it from the dataset and add it to the crosswalk for later reference*/ string filename = Filepath.Text; DicomFile file = DicomFile.Open(filename); DicomDataset dataSet = file.Dataset; path = "C:\\Users\\Tyler\\Documents\\Schoolwork\\Third Year\\COSC 310\\CrosswalkTable.txt"; int i = 0; List<DicomTag> tags = new List<DicomTag>(); foreach (string input in tagList) { foreach (DicomDictionaryEntry thing in DicomDictionary.Default) { if (thing.Tag.ToString().Equals(input)) { MessageBox.Show("found matching tag for " + thing.Tag.ToString()); tags.Add(thing.Tag); } } } addPatientInfo(tags, dataSet, file.Dataset.Get<String>(DicomTag.PatientName)); foreach (DicomTag thing in tags) { MessageBox.Show("anonymizing tag " + thing.ToString()); dataSet.Remove(thing); } MessageBox.Show("writing new dicom file"); DicomFile anon = new DicomFile(dataSet); try { anon.Save(@"anonymized" + i + ".dcm"); } catch (Exception exc) { MessageBox.Show("Error: " + exc.ToString()); } }
public void Print(IList<FilmBox> filmBoxList) { try { Status = PrintJobStatus.Pending; OnStatusUpdate("Preparing films for printing"); var printJobDir = new System.IO.DirectoryInfo(FullPrintJobFolder); if (!printJobDir.Exists) { printJobDir.Create(); } DicomFile file; int filmsCount = FilmBoxFolderList.Count; for (int i = 0; i < filmBoxList.Count; i++) { var filmBox = filmBoxList[i]; var filmBoxDir = printJobDir.CreateSubdirectory(string.Format("F{0:000000}", i + 1 + filmsCount)); file = new DicomFile(filmBox.FilmSession); file.Save(string.Format(@"{0}\FilmSession.dcm", filmBoxDir.FullName)); FilmBoxFolderList.Add(filmBoxDir.Name); filmBox.Save(filmBoxDir.FullName); } FilmSessionLabel = filmBoxList.First().FilmSession.FilmSessionLabel; var thread = new Thread(new ThreadStart(DoPrint)); thread.Name = string.Format("PrintJob {0}", SOPInstanceUID.UID); thread.IsBackground = true; thread.Start(); } catch (Exception ex) { Error = ex; Status = PrintJobStatus.Failure; OnStatusUpdate("Print failed"); DeletePrintFolder(); } }
public static void SaveDicomToFile(DicomDataset dataset, string storagePath, DicomFile dicomFile, ServerOptions serverOptions) { var pacientName = dataset.GetPacientName(serverOptions); var pacientDate = dataset.Get<DateTime>(DicomTag.PatientBirthDate); var imageDateTime = dataset.GetImageDateTime(); var path = Path.GetFullPath(storagePath); path = Path.Combine(path, imageDateTime.Year.ToString("D4")); path = Path.Combine(path, imageDateTime.Month.ToString("D2")); path = Path.Combine(path, imageDateTime.ToShortDateString()); if (!Directory.Exists(path)) Directory.CreateDirectory(path); string fileName = pacientName + " " + pacientDate.ToShortDateString() + " " + imageDateTime.ToLongTimeString() + ".dcm"; fileName = Path.GetInvalidFileNameChars().Aggregate(fileName, (current, invalidChar) => current.Replace(invalidChar, '_')); fileName = Path.Combine(path, fileName); using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { dicomFile.Save(fileStream); fileStream.Flush(); } var item = new QueueItem { FileName = fileName, Options = serverOptions }; lock (BackgroundService.Services) { foreach (var queueService in BackgroundService.Services.OfType<QueueService>()) queueService.Enqueue(item); } try { if(Settings.Default.QueueNameList.Count > 0) { foreach (var queueName in Settings.Default.QueueNameList) { if (!string.IsNullOrEmpty(queueName)) { var name = queueName; if (!name.Contains(@"\")) name = @".\Private$\" + name; System.Messaging.MessageQueue messageQueue; if (System.Messaging.MessageQueue.Exists(name)) messageQueue = new System.Messaging.MessageQueue(name); else messageQueue = System.Messaging.MessageQueue.Create(name); try { messageQueue.Send(item); } finally { messageQueue.Dispose(); } } } } } catch { } }
public async Task OpenAsync_FromFile_YieldsValidDicomFile() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); var openFile = await DicomFile.OpenAsync(fileName); var expected = MinimumDatasetInstanceUid; var actual = openFile.Dataset.Get<string>(DicomTag.SOPInstanceUID); Assert.Equal(expected, actual); }
public void Open_StreamOfMemoryMappedFile_YieldsValidDicomFile() { var saveFile = new DicomFile(MinimumDatatset); var fileName = Path.GetTempFileName(); saveFile.Save(fileName); var file = MemoryMappedFile.CreateFromFile(fileName); var openFile = DicomFile.Open(file.CreateViewStream()); var expected = MinimumDatasetInstanceUid; var actual = openFile.Dataset.Get<string>(DicomTag.SOPInstanceUID); Assert.Equal(expected, actual); }