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());
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }