예제 #1
0
        /// <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 { }
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }