예제 #1
0
 public void Save_ToFile_FileExistsOnDisk()
 {
     var saveFile = new DicomFile(MinimumDatatset);
     var fileName = Path.GetTempFileName();
     saveFile.Save(fileName);
     Assert.True(File.Exists(fileName));
 }
예제 #2
0
        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);
            }
        }
예제 #3
0
 private static byte[] SerializeDicom_(DicomDataset dataset)
 {
     var stream = new MemoryStream();
     var file = new DicomFile(dataset);
     file.Save(stream);
     return stream.ToArray();
 }
예제 #4
0
        public void Save_ToFile_FileExistsOnDisk()
        {
            var saveFile = new DicomFile(MinimumDatatset);
            var fileName = Path.GetTempFileName();

            saveFile.Save(fileName);
            Assert.True(File.Exists(fileName));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
            }
        }
예제 #7
0
        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);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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);
        }
예제 #11
0
        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);
        }
예제 #12
0
        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);
        }
예제 #13
0
        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);
        }
예제 #14
0
        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);
            }
        }
예제 #15
0
        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);
        }
예제 #16
0
파일: MainForm.cs 프로젝트: rcd/fo-dicom
		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);
			}
		}
예제 #17
0
        /*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());
            }
        }
예제 #18
0
        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();
            }
        }
예제 #19
0
        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
            {
            }

        }
예제 #20
0
        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);
        }
예제 #21
0
        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);
        }