Beispiel #1
0
        public string RetrieveSeriesThumbnail(DicomSeries series)
        {
            if (series == null)
            {
                throw new ArgumentNullException(nameof(series));
            }

            string thumbnail = "";

            try
            {
                var cmd = _conn.CreateCommand();

                cmd.CommandText =
                    @"SELECT ThumbnailBase64 FROM SeriesImage WHERE SeriesID=@seriesID AND ThumbnailBase64 IS NOT NULL";
                cmd.Prepare();

                cmd.Parameters.AddWithValue("@seriesID", series.ID.ToString());

                var reader = cmd.ExecuteReader();

                if (reader.Read())
                {
                    thumbnail = GetColumnValue <string>(reader, "ThumbnailBase64");
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.Message);
                System.Diagnostics.Debug.Assert(false, e.Message);
            }

            return(thumbnail);
        }
Beispiel #2
0
 private void UpdateDicomSeries(DicomSeries domainItem, DicomSeriesDetail sourceItem)
 {
     domainItem.StudyInstanceUID  = sourceItem.StudyInstanceUID;
     domainItem.SeriesInstanceUID = sourceItem.SeriesInstanceUID;
     domainItem.SeriesDescription = sourceItem.SeriesDescription;
     domainItem.SeriesNumber      = sourceItem.SeriesNumber;
     domainItem.NumberOfSeriesRelatedInstances = sourceItem.NumberOfSeriesRelatedInstances;
 }
Beispiel #3
0
        private DicomSeries CreateDicomSeries(DicomSeriesDetail detail, ModalityPerformedProcedureStep mpps)
        {
            DicomSeries newSeries = new DicomSeries();

            newSeries.ModalityPerformedProcedureStep = mpps;
            UpdateDicomSeries(newSeries, detail);
            return(newSeries);
        }
Beispiel #4
0
        private DicomSeriesDetail CreateDicomSeriesDetail(DicomSeries dicomSeries)
        {
            DicomSeriesDetail detail = new DicomSeriesDetail();

            detail.ModalityPerformedProcedureStepRef = dicomSeries.ModalityPerformedProcedureStep.GetRef();
            detail.DicomSeriesRef    = dicomSeries.GetRef();
            detail.StudyInstanceUID  = dicomSeries.StudyInstanceUID;
            detail.SeriesInstanceUID = dicomSeries.SeriesInstanceUID;
            detail.SeriesDescription = dicomSeries.SeriesDescription;
            detail.SeriesNumber      = dicomSeries.SeriesNumber;
            detail.NumberOfSeriesRelatedInstances = dicomSeries.NumberOfSeriesRelatedInstances;

            return(detail);
        }
Beispiel #5
0
        public void SaveSeriesImageFile(DicomSeries series, string studyFolderPath, string imageFilename)
        {
            if (series == null)
            {
                throw new ArgumentNullException(nameof(series));
            }
            if (string.IsNullOrWhiteSpace(studyFolderPath))
            {
                throw new ArgumentNullException(nameof(studyFolderPath));
            }
            if (string.IsNullOrWhiteSpace(imageFilename))
            {
                throw new ArgumentNullException(nameof(imageFilename));
            }

            string imageFilePath = System.IO.Path.Combine(studyFolderPath, imageFilename);

            byte[] imageBytes = File.ReadAllBytes(imageFilePath);

            //string strBase64EncodedContents = System.Convert.ToBase64String(imageBytes);

            //string strBase64EncodedThumbnail = "";

            //if (imageFilename.EndsWith("png"))
            //{
            //    strBase64EncodedThumbnail = Utilities.CreateBase64EncodedThumbnailFromFile(imageFilePath, 64, 64);
            //}

            string strNow = DatabaseDateString(DateTime.Now);

            var cmd = _conn.CreateCommand();

            cmd.CommandText =
                @"INSERT INTO SeriesImage(ID, ImageType, Image, OriginalFilename, SeriesID)
                  VALUES (@ID, @imagetype, @image, @originalfilename, @seriesID)";
            cmd.Prepare();

            Guid imageID = Guid.NewGuid();

            string imageType = TranslateImageFilenameToImageType(imageFilename);

            cmd.Parameters.AddWithValue("@ID", DatabaseGuidString(imageID));
            cmd.Parameters.AddWithValue("@imagetype", imageType);
            cmd.Parameters.Add("@image", DbType.Binary, 20).Value = imageBytes;
            cmd.Parameters.AddWithValue("@drapeusedatcapture", series.DrapeUsedAtCapture ? 1 : 0);
            cmd.Parameters.AddWithValue("@originalfilename", imageFilename);
            cmd.Parameters.AddWithValue("@seriesID", DatabaseGuidString(series.ID));

            cmd.ExecuteNonQuery();
        }
Beispiel #6
0
        public void SaveSeries(DicomSeries series, DicomStudy study, PatientInformation patient, string studyFolderPath)
        {
            if (series == null)
            {
                throw new ArgumentNullException(nameof(series));
            }
            if (study == null)
            {
                throw new ArgumentNullException(nameof(study));
            }
            if (patient == null)
            {
                throw new ArgumentNullException(nameof(patient));
            }
            if (string.IsNullOrWhiteSpace(patient.PatientKey))
            {
                throw new ArgumentNullException("patient.PatientKey");
            }

            string strNow = DatabaseDateString(DateTime.Now);

            var pngFileList =
                System.IO.Directory.EnumerateFiles(studyFolderPath, series.SeriesFileName + "*.png").ToList();

            string pngFile = pngFileList.Count == 1 ? pngFileList[0] : "";

            byte[] thumbnail = Utilities.CreateThumbnailFromFile(pngFile, 64, 64);

            var cmd = _conn.CreateCommand();

            cmd.CommandText =
                "INSERT INTO Series(ID, SeriesDate, SeriesDescription, StudyID, DrapeUsedAtCapture, Thumbnail) VALUES (@ID, @seriesdate, @seriesdescription, @studyID, @drapeusedatcapture, @thumbnail)";
            cmd.Prepare();

            Guid seriesID = Guid.NewGuid();

            series.ID = seriesID;

            cmd.Parameters.AddWithValue("@ID", DatabaseGuidString(series.ID));
            cmd.Parameters.AddWithValue("@seriesdate", DatabaseDateString(ParseDicomDateToDateTime(series.SeriesDate)));
            cmd.Parameters.AddWithValue("@seriesdescription", series.SeriesDescription);
            cmd.Parameters.AddWithValue("@studyID", DatabaseGuidString(study.ID));
            cmd.Parameters.AddWithValue("@drapeusedatcapture", series.DrapeUsedAtCapture ? 1 : 0);
            cmd.Parameters.AddWithValue("@drapeusedatcapture", series.DrapeUsedAtCapture ? 1 : 0);
            cmd.Parameters.Add("@thumbnail", DbType.Binary, 20).Value = thumbnail;

            cmd.ExecuteNonQuery();
        }
Beispiel #7
0
        /// <summary>
        /// This method will split dicom file to series and add to study object
        /// </summary>
        /// <param name="study"></param>
        /// <param name="dicomFile"></param>
        private void FindMatchingSeriesOrSplit(List <DicomStudy> studies, DicomFile dicomFile)
        {
            var seriesInstanceUID = dicomFile.Dataset.Get <string>(DicomTag.SeriesInstanceUID);
            var studyInstanceUID  = dicomFile.Dataset.Get <string>(DicomTag.StudyInstanceUID);


            bool matchingStudyFound = false;

            //first add study to list
            foreach (var study in studies)
            {
                //check if study is in list
                if (study.StudyInstanceUid == studyInstanceUID)
                {
                    matchingStudyFound = true;

                    bool matchingSeriesFound = false;
                    foreach (var series in study.Series)
                    {
                        if (series.SeriesInstanceUid == seriesInstanceUID)
                        {
                            matchingSeriesFound = true;
                            //if series found then add the dicomfile to instance
                            series.Instances.Add(dicomFile);
                        }
                    }

                    //add series if matching series not found
                    if (matchingSeriesFound == false)
                    {
                        DicomSeries dicomSeries = new DicomSeries(dicomFile);
                        study.Series.Add(dicomSeries);
                    }
                }
            }

            //check if study is in list if not add new study and add the series and instance
            if (matchingStudyFound == false)
            {
                DicomStudy  dicomStudy  = new DicomStudy(dicomFile);
                DicomSeries dicomSeries = new DicomSeries(dicomFile);
                dicomSeries.Instances.Add(dicomFile);
                dicomStudy.Series.Add(dicomSeries);

                studies.Add(dicomStudy);
            }
        }
Beispiel #8
0
        public DicomSeries CreateSeries(string ID, string seriesDate, string seriesDescription, DicomStudy study, byte[] thumbnail)
        {
            DateTime seriesDateTime;

            DateTime.TryParse(seriesDate, out seriesDateTime);
            var series = new DicomSeries(study.PatientID.ToString(), study, null)
            {
                ID                = Guid.Parse(ID),
                SeriesDate        = seriesDateTime.ToShortDateString(),
                SeriesTime        = seriesDateTime.ToShortTimeString(),
                SeriesDescription = seriesDescription,
            };

            series.DicomSeriesDescription.Thumbnail = Convert.ToBase64String(thumbnail);

            return(series);
        }
        /// <summary>
        /// Loads images as writablebitmaps to list - consumes a lot of memory but works fast
        /// Frames support added
        /// </summary>
        /// <param name="series"></param>
        public void LoadBitmapsFromStudy(DicomSeries series)
        {
            //load dicom files from series
            _loadedBitmapSources = new List <BitmapSource>();
            _loadedDicomImages   = new List <DicomImage>();

            NumberOfImages = 0;

            foreach (var dicomFile in series.Instances)
            {
                try
                {
                    if (dicomFile.Dataset.Contains(DicomTag.PixelData))
                    {
                        var dicomImage = new DicomImage(dicomFile.Dataset);

                        CurrentWindowWidth  = dicomImage.WindowWidth;
                        CurrentWindowCentre = dicomImage.WindowCenter;

                        for (int i = 0; i < dicomImage.NumberOfFrames; i++)
                        {
                            var frame = dicomImage.RenderImage(i).AsWriteableBitmap();
                            _loadedBitmapSources.Add(frame);
                            _loadedDicomImages.Add(dicomImage);
                        }

                        // var frames = Enumerable.Range(0, dicomImage.NumberOfFrames).Select(frame => dicomImage.RenderImage(frame).As<WriteableBitmap>());

                        //WriteableBitmap dicomBitmap = dicomImage.RenderImage(0).As<WriteableBitmap>();
                        // _loadedBitmapSources.Add(dicomBitmap);

                        //_loadedBitmapSources.AddRange(frames.ToList());
                    }
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    System.Diagnostics.Debug.WriteLine(ex.InnerException);
                }
            }

            NumberOfImages = _loadedBitmapSources.Count;
            //NumberOfImages = _loadedDicomImages.Count;
        }
        private void WriteSeriesObjectToDb(DicomSeries series, DicomStudy study, PatientInformation patient, string studyFolderPath)
        {
            if (series != null && study != null && patient != null && !string.IsNullOrWhiteSpace(studyFolderPath))
            {
                AppSingleton.DatabaseService.SaveSeries(series, study, patient, studyFolderPath);

                var seriesImageFiles =
                    System.IO.Directory.EnumerateFiles(studyFolderPath, series.SeriesFileName + "*.*");

                foreach (string filename in seriesImageFiles)
                {
                    if (filename.EndsWith(".txt") || filename.EndsWith(".png"))
                    {
                        continue;
                    }

                    AppSingleton.DatabaseService.SaveSeriesImageFile(series, studyFolderPath, filename);
                }
            }
        }
        /// <summary>
        /// Not used because this is slow
        /// </summary>
        /// <param name="series"></param>
        public void LoadDicomFilesFromStudy(DicomSeries series)
        {
            //load dicom files from series
            _loadedDicomFiles = new List <DicomFile>();
            NumberOfImages    = 0;

            foreach (var dicomFile in series.Instances)
            {
                try
                {
                    _loadedDicomFiles.Add(dicomFile);
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(ex.Message);
                    System.Diagnostics.Debug.WriteLine(ex.InnerException);
                }
            }

            NumberOfImages = _loadedDicomFiles.Count;
        }