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); }
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; }
private DicomSeries CreateDicomSeries(DicomSeriesDetail detail, ModalityPerformedProcedureStep mpps) { DicomSeries newSeries = new DicomSeries(); newSeries.ModalityPerformedProcedureStep = mpps; UpdateDicomSeries(newSeries, detail); return(newSeries); }
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); }
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(); }
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(); }
/// <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); } }
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; }