private static ImageImp LoadImage(ImageDesc imageDesc) { var imagePath = CStoreScp.GetImageUri(imageDesc.SeriesInstanceUid, imageDesc.SopInstanceUid); if (!File.Exists(imagePath)) { return(null); } var dicomFile = DicomFile.Open(imagePath); return(dicomFile.CreateImage()); }
public SearchServiceFactory(Wrapper <FusPersistencyFoSettings> settings) { _settings = settings.Value; try { CStoreScp.StorageCleanup(_settings.StorageHiWaterMarkGb, _settings.StorageLoWaterMarkGb); } catch (Exception ex) { _logger.Error(ex, "Dicom storage cleanup failed"); } _storeScp = DicomServer.Create <CStoreScp>(_settings.CStoreScpPort); }
internal override async Task GetSeriesImagesImpAsync(GetSeriesImagesRequest request, CancellationToken ct) { var seriesByReq = new Dictionary <DicomCMoveRequest, Series>(); // filled below var remainingImagesByReq = new Dictionary <DicomCMoveRequest, int>(); // filled below var totalImages = request.Series.Sum(s => s.NumberOfSeriesRelatedInstances); object progressLock = new object(); DicomCMoveRequest.ResponseDelegate handler = (req, resp) => { lock (progressLock) { remainingImagesByReq[req] = resp.Remaining; var remainingImages = remainingImagesByReq.Sum(kvp => kvp.Value); var progress = (double)(totalImages - remainingImages) / totalImages; if (progress < 0.99) { request.RaiseProgress((int)(progress * 100)); } } if (resp.Remaining == 0) { var series = seriesByReq[req]; series.ImagesUri = CStoreScp.GetSeriesImagesUri(series.SeriesInstanceUid); request.RaiseSeriesDone(series); } }; foreach (var series in request.Series) { var cmove = series.CreateCMoveRequest(_settings.DicomSettings); cmove.OnResponseReceived += handler; seriesByReq[cmove] = series; remainingImagesByReq[cmove] = series.NumberOfSeriesRelatedInstances; } var client = _settings.DicomSettings.CreateClient(); await client.AddRequestsAsync(seriesByReq.Keys); await client.SendAsync(ct); request.RaiseProgress(100); }