Пример #1
0
        public void Insert(string filename)
        {
            var file = new DicomFile(filename);
            file.Load();

            Insert(file);
        }
Пример #2
0
        static void Main(string[] args)
        {
            DicomFile file = new DicomFile();
            file.DataSet.SpecificCharacterSet = "ISO_IR 100";

            file.DataSet[DicomTags.SpecificCharacterSet].SetStringValue("ISO_IR 100");
            file.DataSet[DicomTags.PatientsBirthName].SetStringValue("中文");
            file.DataSet[DicomTags.PatientsName].SetStringValue("(中文)");

            file.Save("1.dcm");

            DicomFile readFile = new DicomFile("1.dcm");
            readFile.Load();
            Console.WriteLine(readFile.DataSet[DicomTags.PatientsBirthName].GetString(0, string.Empty));
            Console.WriteLine(readFile.DataSet[DicomTags.PatientsName].GetString(0, string.Empty));

            DicomFile file2 = new DicomFile();
            file2.DataSet.SpecificCharacterSet = "GB18030";

            file2.DataSet[DicomTags.SpecificCharacterSet].SetStringValue("GB18030");
            file2.DataSet[DicomTags.PatientsName].SetStringValue("刘瑞飞(liuruifei)");
            file2.Save("2.dcm");

            DicomFile readFile2 = new DicomFile("2.dcm");
            readFile2.Load();
            Console.WriteLine(readFile2.DataSet[DicomTags.PatientsName].GetString(0, string.Empty));

            Console.WriteLine(@"press any key to exit!");
            Console.ReadKey();

        }
Пример #3
0
        static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine(@"Usage: ImagerSender.exe filename studynumber seriesnumber");
                return;
            }

            var actions = new List<Action>();
            for (int threadNum = 0; threadNum < Settings1.Default.SendThreadNumber; threadNum++)
            {
                actions.Add( () =>
                    {
                        var f = new DicomFile(args[0]);
                        f.Load();

                        for (int i = 0; i < int.Parse(args[1]); i++)
                        {
                            f.DataSet[DicomTags.StudyInstanceUid].SetString(0, DicomUid.GenerateUid().UID);
                            for (int j = 0; j < int.Parse(args[2]); j++)
                            {
                                f.DataSet[DicomTags.SeriesInstanceUid].SetString(0, DicomUid.GenerateUid().UID);
                                
                                for (int k = 0; k < 20; k++)
                                {
                                    var scu = new StorageScu(Settings1.Default.AETitle, Settings1.Default.RemoteAETitle,
                                        Settings1.Default.RemoteHost, Settings1.Default.RemotePort);
                                    f.DataSet[DicomTags.SopInstanceUid].SetString(0, MyDicomGenerater.GenerateUid());
                                    scu.AddStorageInstance(new StorageInstance(f));
                                    scu.Send();
                                }

                            }
                        }
                    } );
            }
            SpawnAndWait(actions);

            Console.WriteLine(@"Press any key to exist...");
            Console.ReadKey();

        }
Пример #4
0
        public bool Import(DicomMessage dicomMessage)
        {
            if (dicomMessage.DataSet == null)
            {
                throw new ArgumentException();
            }

            var patient = new Patient
            {
                PatientId = dicomMessage.DataSet[DicomTags.PatientId].GetString(0, string.Empty),
                PatientName = dicomMessage.DataSet[DicomTags.PatientsName].GetString(0, string.Empty),
                PatientBirthDate = dicomMessage.DataSet[DicomTags.PatientsBirthDate].GetString(0, string.Empty),
                Issuer = dicomMessage.DataSet[DicomTags.IssuerOfPatientId].GetString(0, string.Empty),
            };

            var study = new Study()
            {
                StudyId = dicomMessage.DataSet[DicomTags.StudyId].GetString(0, string.Empty),
                StudyUid = dicomMessage.DataSet[DicomTags.StudyInstanceUid].GetString(0, string.Empty),
                AccessionNumber = dicomMessage.DataSet[DicomTags.AccessionNumber].GetString(0, string.Empty),
                StudyDate = dicomMessage.DataSet[DicomTags.StudyDate].GetString(0, string.Empty),
                StudyTime = dicomMessage.DataSet[DicomTags.StudyTime].GetString(0, string.Empty),
                RefPhysician = dicomMessage.DataSet[DicomTags.ReferringPhysiciansName].GetString(0, string.Empty),
                StudyDescription = dicomMessage.DataSet[DicomTags.StudyDescription].GetString(0, string.Empty),

                PatientId = patient.PatientId,
                PatientName = patient.PatientName,
                PatientBirthday = patient.PatientBirthDate,
                PatientAge = dicomMessage.DataSet[DicomTags.PatientsAge].GetString(0, string.Empty),
                PatientSize = dicomMessage.DataSet[DicomTags.PatientsSize].GetString(0, string.Empty),
                PatientWeight = dicomMessage.DataSet[DicomTags.PatientsWeight].GetString(0, string.Empty),
                PatientSex = dicomMessage.DataSet[DicomTags.PatientsSex].GetString(0, string.Empty)
            };

            var series = new Series()
            {
                SeriesUid = dicomMessage.DataSet[DicomTags.SeriesInstanceUid].GetString(0, string.Empty),
                SeriesNumber = dicomMessage.DataSet[DicomTags.SeriesNumber].GetString(0, string.Empty),
                Modality = dicomMessage.DataSet[DicomTags.Modality].GetString(0, string.Empty),
                BodyPart = dicomMessage.DataSet[DicomTags.BodyPartExamined].GetString(0, string.Empty),
                Institution = dicomMessage.DataSet[DicomTags.InstitutionName].GetString(0, string.Empty),
                StationName = dicomMessage.DataSet[DicomTags.StationName].GetString(0, string.Empty),
                Department = dicomMessage.DataSet[DicomTags.InstitutionalDepartmentName].GetString(0, string.Empty),
                PerfPhysician = dicomMessage.DataSet[DicomTags.PerformingPhysiciansName].GetString(0, string.Empty),
                SeriesDate = dicomMessage.DataSet[DicomTags.SeriesDate].GetString(0, string.Empty),
                SeriesTime = dicomMessage.DataSet[DicomTags.SeriesTime].GetString(0, string.Empty),
                SeriesDescription = dicomMessage.DataSet[DicomTags.SeriesDescription].GetString(0, string.Empty),
                PerformedProcedureStepStartDate = dicomMessage.DataSet[DicomTags.PerformedProcedureStepStartDate].GetString(0, string.Empty),
                PerformedProcedureStepStartTime = dicomMessage.DataSet[DicomTags.PerformedProcedureStepStartTime].GetString(0, string.Empty),
            };

            var instance = new Instance()
            {
                SopInstanceUid = dicomMessage.DataSet[DicomTags.SopInstanceUid].GetString(0, string.Empty),
                SopClassUid = dicomMessage.DataSet[DicomTags.SopClassUid].GetString(0, string.Empty),
                InstanceNumber = dicomMessage.DataSet[DicomTags.InstanceNumber].GetString(0, string.Empty),
                ContentDate = dicomMessage.DataSet[DicomTags.ContentDate].GetString(0, string.Empty),
                ContentTime = dicomMessage.DataSet[DicomTags.ContentTime].GetString(0, string.Empty)
            };

            if (string.IsNullOrEmpty(study.StudyUid)
                || string.IsNullOrEmpty(series.SeriesUid)
                || string.IsNullOrEmpty(instance.SopInstanceUid))
            {
                throw new ArgumentException();
            }

            // Get Patient Db Object 
            using (var context = new PacsContext())
            {
                Patient dbPatient = null;

                var dbStudy = InsertStudy(context, study, patient, out dbPatient);

                // Patient and study is exist in db now
                var dbSeries = InsertSeries(context, series, dbStudy, dbPatient);

                // insert instance 
                var dbInstance = InsertImage(context, instance, dbSeries, dbStudy, dbPatient);

                var dbFile = InsertFile(context, dbInstance, dbSeries, dbStudy, dbPatient);

                var dicomFile = new DicomFile(dicomMessage, dbFile.FilePath);
                
                if (!Directory.Exists(Path.GetDirectoryName(dbFile.FilePath)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(dbFile.FilePath));
                }

                dicomFile.Save();

                context.SaveChanges();
            }

            return true;
        }
Пример #5
0
		/// <summary>
		/// Creates an instance of <see cref="DicomPixelData"/> from specified image path
		/// </summary>
		/// <param name="path"></param>
		/// <returns>
		/// </returns>
		public static DicomPixelData CreateFrom(string path)
		{
			DicomFile file = new DicomFile(path);
			file.Load();
			return CreateFrom(file);
		}
Пример #6
0
		/// <summary>
		/// Creates an instance of <see cref="DicomPixelData"/> from specified stream
		/// </summary>
		/// <param name="stream"></param>
		/// <returns>
		/// </returns>
		public static DicomPixelData CreateFrom(Stream stream)
		{
			DicomFile file = new DicomFile();
			file.Load(stream);
			return CreateFrom(file);
		}
Пример #7
0
        /// <summary>
        /// Initializes a new instance of the DicomDirectory class.
        /// </summary>
        /// <remarks>Sets most default values which can be changed via </remarks>
        /// <param name="aeTitle">The AE Title of the Media Reader/Writer accessing the DICOMDIR</param>
        public DicomDirectory(string aeTitle)
        {
            try
            {
                _dicomDirFile = new DicomFile();

                _dicomDirFile.MetaInfo[DicomTags.FileMetaInformationVersion].Values = new byte[] { 0x00, 0x01 };
                _dicomDirFile.MediaStorageSopClassUid = DicomUids.MediaStorageDirectoryStorage.UID;
                _dicomDirFile.SourceApplicationEntityTitle = aeTitle;
                _dicomDirFile.TransferSyntax = TransferSyntax.ExplicitVrLittleEndian;

                //_dicomDirFile.PrivateInformationCreatorUid = String.Empty;
                _dicomDirFile.DataSet[DicomTags.FileSetId].Values = String.Empty;
                ImplementationVersionName = DicomImplementation.Version;
                ImplementationClassUid = DicomImplementation.ClassUID.UID;

                _dicomDirFile.MediaStorageSopInstanceUid = DicomUid.GenerateUid().UID;

                // Set zero value so we can calculate the file Offset
				_dicomDirFile.DataSet[DicomTags.OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity].SetUInt32(0, 0);
                _dicomDirFile.DataSet[DicomTags.OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity].SetUInt32(0,0);
                _dicomDirFile.DataSet[DicomTags.FileSetConsistencyFlag].SetUInt16(0,0);

                _directoryRecordSequence = (DicomAttributeSQ)_dicomDirFile.DataSet[DicomTags.DirectoryRecordSequence];
            }
            catch (Exception ex)
            {
				Platform.Log(LogLevel.Error, ex, "Exception initializing DicomDirectory");
                throw;
            }
        }
Пример #8
0
        public void Dispose()
        {
			if (!_disposed)
            {
                if (_dicomDirFile != null)
                    _dicomDirFile = null;

				_disposed = true;
            }
        }
Пример #9
0
        /// <summary>
        /// Create an image Directory record
        /// </summary>
        /// <param name="dicomFile">The dicom file.</param>
        /// <param name="optionalDicomDirFileLocation">The optional dicom dir file location.</param>
        private DirectoryRecordSequenceItem CreateImageItem(DicomFile dicomFile, string optionalDicomDirFileLocation)
        {
            if (String.IsNullOrEmpty(optionalDicomDirFileLocation))
            {
                optionalDicomDirFileLocation = EvaluateRelativePath(_saveFileName, dicomFile.Filename);
            }

        	DirectoryRecordType type;
			if (DirectoryRecordDictionary.TryGetDirectoryRecordType(dicomFile.SopClass.Uid, out type))
			{
				string name;
				DirectoryRecordTypeDictionary.TryGetName(type, out name);

				IDictionary<uint, object> dicomTags = new Dictionary<uint, object>();
				dicomTags.Add(DicomTags.ReferencedFileId, optionalDicomDirFileLocation);
				dicomTags.Add(DicomTags.ReferencedSopClassUidInFile, dicomFile.SopClass.Uid);
				dicomTags.Add(DicomTags.ReferencedSopInstanceUidInFile, dicomFile.MediaStorageSopInstanceUid);
				dicomTags.Add(DicomTags.ReferencedTransferSyntaxUidInFile, dicomFile.TransferSyntaxUid);

				// NOTE:  This is a bit problematic, but sufficient for now. We should take into account
				// which tags are type 2 and which are type 1 and which are conditional when setting them 
				// in AddSequenceItem
				List<uint> tagList;
				if (DirectoryRecordDictionary.TryGetDirectoryRecordTagList(type, out tagList))
					foreach (uint tag in tagList)
						dicomTags.Add(tag, null);

				return AddSequenceItem(type, dicomFile.DataSet, dicomTags);
			}

        	return null;
        }
Пример #10
0
 /// <summary>
 /// Traverse at the image level to see if the image exists or create a new image if it doesn't.
 /// </summary>
 /// <param name="images"></param>
 /// <param name="file"></param>
 /// <param name="optionalDicomDirFileLocation"></param>
 /// <returns></returns>
 private void GetExistingOrCreateNewImage(DirectoryRecordSequenceItem images, DicomFile file, string optionalDicomDirFileLocation)
 {
     DirectoryRecordSequenceItem currentImage = images;
     while (currentImage != null)
     {
         if (currentImage[DicomTags.ReferencedSopInstanceUidInFile].Equals(file.DataSet[DicomTags.SopInstanceUid]))
         {
         	return;
         }
     	if (currentImage.NextDirectoryRecord == null)
         {
             currentImage.NextDirectoryRecord = CreateImageItem(file, optionalDicomDirFileLocation);
         	return;
         }
         currentImage = currentImage.NextDirectoryRecord;
     }
 	return;
 }
Пример #11
0
		/// <summary>
		/// Called to insert a DICOM file into the directory record structure.
		/// </summary>
		/// <param name="dicomFile"></param>
		/// <param name="optionalRelativeRootPath"></param>
		private void InsertFile(DicomFile dicomFile, string optionalRelativeRootPath)
		{
			try
			{
				if (dicomFile.DataSet.Count == 0)
					dicomFile.Load(DicomReadOptions.StorePixelDataReferences | DicomReadOptions.Default);

				DirectoryRecordSequenceItem patientRecord;
				DirectoryRecordSequenceItem studyRecord;
				DirectoryRecordSequenceItem seriesRecord;

				if (_rootRecord == null)
					_rootRecord = patientRecord = CreatePatientItem(dicomFile);
				else
					patientRecord = GetExistingOrCreateNewPatient(_rootRecord, dicomFile);

				if (patientRecord.LowerLevelDirectoryRecord == null)
					patientRecord.LowerLevelDirectoryRecord = studyRecord = CreateStudyItem(dicomFile);
				else
					studyRecord = GetExistingOrCreateNewStudy(patientRecord.LowerLevelDirectoryRecord, dicomFile);

				if (studyRecord.LowerLevelDirectoryRecord == null)
					studyRecord.LowerLevelDirectoryRecord = seriesRecord = CreateSeriesItem(dicomFile);
				else
					seriesRecord = GetExistingOrCreateNewSeries(studyRecord.LowerLevelDirectoryRecord, dicomFile);

				if (seriesRecord.LowerLevelDirectoryRecord == null)
					seriesRecord.LowerLevelDirectoryRecord = CreateImageItem(dicomFile, optionalRelativeRootPath);
				else
					GetExistingOrCreateNewImage(seriesRecord.LowerLevelDirectoryRecord, dicomFile, optionalRelativeRootPath);
			}
			catch (Exception ex)
			{
				Platform.Log(LogLevel.Error, ex, "Error adding image {0} to directory file", dicomFile.Filename);
				throw;
			}
		}
Пример #12
0
        /// <summary>
        /// Adds the dicom image file to the list of images to add.
        /// </summary>
        /// <param name="dicomFileName">Name of the dicom file.</param>
        /// <param name="optionalDicomDirFileLocation">specifies the file location in the Directory Record ReferencedFileId 
        /// tag.  If is null or empty, it will use a relative path to the dicom File from the specified DICOM Dir filename in the Save() method.</param>
        public void AddFile(string dicomFileName, string optionalDicomDirFileLocation)
        {
            if (String.IsNullOrEmpty(dicomFileName))
                throw new ArgumentNullException("dicomFileName");

			if (File.Exists(dicomFileName))
			{
				DicomFile dicomFile = new DicomFile(dicomFileName);
				InsertFile(dicomFile, optionalDicomDirFileLocation);
			}
			else
				throw new FileNotFoundException("cannot add DicomFile, does not exist", dicomFileName);
        }
Пример #13
0
        /// <summary>
        /// Adds the dicom image file to the list of images to add.
        /// </summary>
        /// <param name="dicomFile">The dicom file.</param>
        /// <param name="optionalDicomDirFileLocation">specifies the file location in the Directory Record ReferencedFileId 
        /// tag.  If is null or empty, it will use a relative path to the dicom File from the specified DICOM Dir filename in the Save() method.</param>
        public void AddFile(DicomFile dicomFile, string optionalDicomDirFileLocation)
        {
            if (dicomFile == null)
                throw new ArgumentNullException("dicomFile");

			InsertFile(dicomFile, optionalDicomDirFileLocation);
        }
Пример #14
0
 /// <summary>
 /// Creates a new DicomMessage instance from an existing <see cref="DicomFile"/>.
 /// </summary>
 /// <remarks>
 /// This method creates a new command set for the DicomMessage, but shares the DataSet with <paramref name="file"/>.
 /// </remarks>
 /// <param name="file">The <see cref="DicomFile"/> to change into a DicomMessage.</param>
 public DicomMessage(DicomFile file)
 {
     _transferSyntax = file.TransferSyntax;
     MetaInfo = new DicomAttributeCollection(0x00000000,0x0000FFFF);
     DataSet = file.DataSet;
 }
Пример #15
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine(@"Usage: FileLoadTest.exe filepath");
                return;
            }

            string path = args[0];
            string multiThread = args[1];

            Stopwatch watch = new Stopwatch();

            if (multiThread == "0")
            {
                watch.Start();
                DirectoryInfo di = new DirectoryInfo(path);
                List<DicomFile> dicoms = new List<DicomFile>();
                Int64 totalSize = 0;
                int count = 0;
                foreach (FileInfo fi in di.EnumerateFiles())
                {
                    FileStream fs = File.OpenRead(fi.FullName);

                    byte[] buffer = new byte[fi.Length];

                    fs.Read(buffer, 0, buffer.Length);
                    MemoryStream ms = new MemoryStream(buffer);

                    DicomFile dicom = new DicomFile();

                    dicom.Load(ms);
// 
//                     DicomFile dicom = new DicomFile(fi.FullName);
//                     dicom.Load(DicomReadOptions.Default);
//                     totalSize += fi.Length;
//                    dicoms.Add(dicom);

//                     FileStream fs = File.OpenRead(fi.FullName);
// 
//                     byte[] buffer = new byte[fi.Length];
//                     fs.Read(buffer, 0, buffer.Length);

                    totalSize += fi.Length;
                    count += 1;
                }
                watch.Stop();
                Console.WriteLine(@"Load Count: {0}, TotalSize: {1} , Easple Times: {2} second",
                    count, totalSize, watch.ElapsedMilliseconds);
                Console.WriteLine(@"Press any key to exit!");
            }
            else
            {
                watch.Start();
                MultiThreadDicomLoad loader = new MultiThreadDicomLoad();
                loader.LoadAllFile(path);
                watch.Stop();

                Console.WriteLine(@"Load Count: {0}, TotalSize: {1} , Easple Times: {2} second",
                loader.DicomFiles.Count, loader.Size, watch.ElapsedMilliseconds);
                Console.WriteLine(@"Press any key to exit!");
            }
            
        }
Пример #16
0
        private void ProcessItem(MemoryStream ms)
        {
            DicomFile df = new DicomFile();

            df.Load(ms);

            //DicomFiles.Add(df);
        }