public void Insert(string filename) { var file = new DicomFile(filename); file.Load(); Insert(file); }
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(); }
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(); }
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; }
/// <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); }
/// <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); }
/// <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; } }
public void Dispose() { if (!_disposed) { if (_dicomDirFile != null) _dicomDirFile = null; _disposed = true; } }
/// <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; }
/// <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; }
/// <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; } }
/// <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); }
/// <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); }
/// <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; }
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!"); } }
private void ProcessItem(MemoryStream ms) { DicomFile df = new DicomFile(); df.Load(ms); //DicomFiles.Add(df); }