/// <summary> /// 이미지들의 목록을 보여준다. /// </summary> /// <param name="lstFiles"></param> private void DisplayPatientInfo(List <string> lstFiles) { DicomInfomation di = new DicomInfomation(); FileInfo fi = null; try { DataTable dtImages = new DataTable(); DataTable dt = new DataTable(); if (lstFiles != null || lstFiles.Count > 0) { int n = 0; foreach (string dcm in lstFiles) { n++; di._DicomFilePath = dcm; fi = new FileInfo(dcm); di._DicomFileName = fi.Name; dt = di.PatientDicomImageInfo(n); if (dt != null && dt.Rows.Count > 0) { if (dtImages.Rows.Count == 0) { dtImages = dt.Clone(); } foreach (DataRow dr in dt.Rows) { dr["imageNumber"] = n; dr["imagePath"] = dcm.Replace(this._orderInfo.DicomCDFolder, ""); dtImages.ImportRow(dr); } } } this.DisplayPatientDicomInfo(dtImages); } } catch { } }
/// <summary> /// DicomDir 정보 가져오기 - AS-IS /// </summary> /// <param name="dicomDirPath"></param> /// <returns></returns> public static PatientList GetPatientrFromDicomNet(string dicomDirPath) { PatientList returnValue = null; List <PatientInfoEntity> patList = null; Dictionary <string, string> patientList = null; string dicomDesc = string.Empty; try { if (File.Exists(dicomDirPath) == true) { DicomInfomation di = new DicomInfomation(); di._DicomFilePath = dicomDirPath; di._DicomFileName = "DICOMDIR"; List <string> dicomDirStr = di.GetDicomDirString(); int patNo = 0; int studyNo = 0; int seriesNo = 0; int imgNo = 0; patList = new List <PatientInfoEntity>(); string RecordType = string.Empty; string StudyModality = string.Empty; string StudyDate = string.Empty; string StudyTime = string.Empty; string StudyDesc = string.Empty; string SeriesDate = string.Empty; string SeriesTime = string.Empty; string Modality = string.Empty; string BodyPart = string.Empty; PatientInfoEntity patInfo = null; string s1, s2, s3, s4, s5, s11, s12; string CompleteID; string DataStr; int ind; foreach (string str in dicomDirStr) { s1 = str; ind = s1.IndexOf("//"); s2 = s1.Substring(0, ind); s11 = s1.Substring(0, 4); s12 = s1.Substring(4, 4); s3 = s1.Substring(ind + 2); ind = s3.IndexOf(":"); s4 = s3.Substring(0, ind); s5 = s3.Substring(ind + 1); CompleteID = s11.Trim() + s12.Trim(); DataStr = s5.Replace("\0", "").Trim(); if (CompleteID.Equals("00041430") == true) { RecordType = DataStr; } //첫번째 DirectoryRecordType : PATIENT if (CompleteID.Equals("00041430") == true && DataStr == "PATIENT") { if (patNo > 0 && patInfo != null) { patList.Add(patInfo); } patNo++; patInfo = new PatientInfoEntity(); patInfo.listNumber = patNo; patInfo.Patient = new PatientBaseInfo(); patInfo.RecordList = new List <PatientRecordInfo>(); } if (RecordType == "PATIENT") { //환자명 if (CompleteID.Equals("00100010")) { patInfo.Patient.Name = Utils.ReplacePatientName(DataStr); } //환자아이디 if (CompleteID.Equals("00100020")) { patInfo.Patient.ID = Utils.ReplaceSpecialWord(DataStr); } //환자생일 if (CompleteID.Equals("00100030")) { patInfo.Patient.BirthDate = DataStr; } //성별 if (CompleteID.Equals("00100040")) { patInfo.Patient.Gender = DataStr; } //나이 if (CompleteID.Equals("00101010")) { patInfo.Patient.Age = DataStr; } } if (CompleteID.Equals("00041430") && DataStr == "STUDY") { studyNo++; } if (RecordType == "STUDY") { if (CompleteID.Equals("00080061")) { StudyModality = DataStr; } if (CompleteID.Equals("00080020")) { StudyDate = DataStr; } if (CompleteID.Equals("00080030")) { StudyTime = DataStr; } if (CompleteID.Equals("00081030")) { StudyDesc = DataStr; } if (string.IsNullOrEmpty(patInfo.Patient.BirthDate)) { if (CompleteID.Equals("00100030")) { patInfo.Patient.BirthDate = DataStr; } } } if (CompleteID.Equals("00041430") && DataStr == "SERIES") { seriesNo++; } //현재상태가 SERIES 일때 if (RecordType == "SERIES") { if (CompleteID.Equals("00080021")) { SeriesDate = DataStr; } if (CompleteID.Equals("00080031")) { SeriesTime = DataStr; } if (CompleteID.Equals("00080060")) { Modality = DataStr; } if (CompleteID.Equals("00180015")) { BodyPart = DataStr; } } if (RecordType == "IMAGE" && CompleteID.Equals("00041500")) { imgNo++; PatientRecordInfo recordInfo = new PatientRecordInfo(); recordInfo.PatID = patInfo.Patient.ID; recordInfo.StudyNumber = studyNo.ToString().PadLeft(4, '0'); recordInfo.StudyDate = StudyDate; recordInfo.StudyTime = StudyTime; recordInfo.StudyDesc = StudyDesc; recordInfo.StudyModality = StudyModality; recordInfo.SeriesNumber = seriesNo.ToString().PadLeft(4, '0'); recordInfo.SeriesDate = SeriesDate; recordInfo.SeriesTime = SeriesTime; recordInfo.Modality = Modality; recordInfo.BodyPart = BodyPart; recordInfo.ImageFilePath = DataStr; recordInfo.ImageNumber = imgNo.ToString(); patInfo.RecordList.Add(recordInfo); } } if (patInfo != null) { patList.Add(patInfo); } } returnValue = new PatientList(); patientList = new Dictionary <string, string>(); List <PatientInfoEntity> newPatList = PatientConcat(patList); DicomDirReader.SetStudyModalityConcat(ref newPatList, ref patientList, ref dicomDesc); if (dicomDesc.EndsWith("^^")) { dicomDesc = dicomDesc.Substring(0, dicomDesc.Length - 2); } returnValue.Base = newPatList; returnValue.SimpleList = patientList; returnValue.AllDesc = dicomDesc; } catch { } return(returnValue); }
/// <summary> /// 환자정보 가져오기 /// </summary> /// <param name="srcFolder"></param> /// <param name="imgFiles"></param> /// <param name="patInfor"></param> /// <param name="patList"></param> /// <returns></returns> public static Dictionary <string, string> GetPatient(string srcFolder, string disableMultiPatient, out List <string> imgFiles, out PatientList patInfor, out Dictionary <string, string> patList) { imgFiles = null; patList = null; Dictionary <string, string> dicResult = null; string DicomDirFile = Path.Combine(srcFolder, "DICOMDIR"); FileInfo fi = new FileInfo(DicomDirFile); bool isDicomRead = false; patInfor = null; try { if (fi.Exists) { dicResult = new Dictionary <string, string>(); dicResult.Add("ID", ""); dicResult.Add("Name", ""); dicResult.Add("Sex", ""); dicResult.Add("SexKr", ""); dicResult.Add("BirthDay", ""); dicResult.Add("Age", ""); dicResult.Add("StudyDesc", ""); dicResult.Add("Modality", ""); dicResult.Add("ImageCount", ""); dicResult.Add("ImagePath", ""); dicResult.Add("DicomDesc", ""); dicResult.Add("StudyModality", ""); dicResult.Add("PatientCount", "0"); //먼저 원래것으로.. patInfor = DicomDirReader.GetPatientrFromDicomNet(DicomDirFile); if (patInfor == null || patInfor.Base.Count == 0) { //EvilDicom으로 patInfor = DicomDirReader.GetPatientrFromEvil(DicomDirFile); } //DICOMDIR에서 정보를 읽을 수 없을 경우 image file에서.. if (patInfor == null || patInfor.Base.Count == 0) { //환자 폴더 내에서 이미지 파일을 찾아 정보를 가져오도록 하자. DicomInfomation di = new DicomInfomation(); //이미지 파일 목록 가져오기 - .dcm List <string> lstFiles = FileControl.GetDicomImageFiles(new DirectoryInfo(srcFolder)); if (lstFiles != null && lstFiles.Count > 0) { foreach (string dcm in lstFiles) { di._DicomFilePath = dcm; fi = new FileInfo(dcm); di._DicomFileName = fi.Name; dicResult = di.PatientInfo(); if (dicResult != null) { isDicomRead = true; patList = di.PatientLST; dicResult["PatientCount"] = di.PatientCount.ToString(); dicResult.Add("DcmFilePath", dcm); dicResult.Add("DcmFileName", fi.Name); break; } } imgFiles = lstFiles; } } else { isDicomRead = true; dicResult["ID"] = patInfor.Base[0].Patient.ID; dicResult["Name"] = patInfor.Base[0].Patient.Name; dicResult["Sex"] = Utils.CheckNull(patInfor.Base[0].Patient.Gender); dicResult["SexKr"] = Utils.CheckNull(patInfor.Base[0].Patient.GenderKR); dicResult["BirthDay"] = Utils.CheckNull(patInfor.Base[0].Patient.BirthDate); dicResult["Age"] = Utils.CheckNull(patInfor.Base[0].Patient.Age); dicResult["StudyDesc"] = patInfor.Base[0].StudyDescArray; dicResult["Modality"] = patInfor.Base[0].ModalityArray; dicResult["ImageCount"] = patInfor.Base[0].RecordList.Count.ToString(); dicResult["StudyModality"] = patInfor.Base[0].StudyModalityArray; //// 다중환자굽기 사용안함 설정 + 다중환자인 경우 if (disableMultiPatient == "Y" && patInfor.Base.Count > 1) { List <string> lstStdy = new List <string>(); foreach (PatientInfoEntity pInfo in patInfor.Base) { lstStdy.Add(pInfo.StudyModalityArray); } dicResult["StudyModality"] = string.Join("^^", lstStdy); } if (null != patInfor.Base[0].RecordList && patInfor.Base[0].RecordList.Count > 0) { dicResult["ImagePath"] = patInfor.Base[0].RecordList[0].ImageFilePath; } //생일 또는 성별을 못 가져왔을 때 이미지 파일에서 가져오도록.. if (string.IsNullOrEmpty(patInfor.Base[0].Patient.BirthDate) || string.IsNullOrEmpty(patInfor.Base[0].Patient.Gender)) { DicomInfomation di = new DicomInfomation(); di._DicomFilePath = DicomDirFile; Dictionary <string, string> dicImgInfo = di.PatientInfoFromDCM(dicResult["ImagePath"]); if (dicImgInfo != null) { dicResult["Sex"] = dicImgInfo["Sex"]; dicResult["SexKr"] = dicImgInfo["SexKr"]; dicResult["BirthDay"] = dicImgInfo["BirthDay"]; dicResult["Age"] = dicImgInfo["Age"]; } } dicResult["DicomDesc"] = patInfor.AllDesc; patList = patInfor.SimpleList; dicResult["PatientCount"] = patInfor.Base.Count.ToString(); dicResult.Add("DcmFilePath", DicomDirFile); dicResult.Add("DcmFileName", "DICOMDIR"); } if (isDicomRead == false) { dicResult = new Dictionary <string, string>(); dicResult.Add("Result", "NotFound"); } else { dicResult.Add("Result", ""); } } else { ////this.ErrMsgShow("DICOMDIR 파일을 찾을 수 없습니다.\r\n", "Rimage Message : Not Exists DICOMDIR file"); dicResult.Add("Result", "NotFound"); } } catch { } return(dicResult); }