예제 #1
0
        public static bool ProcessPixelRequest(HttpContext context)
        {
            HttpRequest  request  = context.Request;
            HttpResponse response = context.Response;

            if (!IsPixelRequest(request))
            {
                return(false);
            }

            ImageSetParameters parameters = new ImageSetParameters();
            string             imageName  = string.Empty;
            string             nameSpaceQualifiedTypeName = string.Empty;

            parameters = GetParameters(request, out imageName, out nameSpaceQualifiedTypeName);
            if (string.IsNullOrEmpty(nameSpaceQualifiedTypeName))
            {
                return(ProcessResourceRequest(imageName, parameters));
            }

            try
            {
                //object retVal = method.Invoke(null, (object[])parameters);
                IImageSet retVal = GetImageSet(nameSpaceQualifiedTypeName, parameters);
                if (retVal == null)
                {
                    response.Clear();
                    response.StatusCode = 404;
                    response.Status     = "Image not found";
                    context.ApplicationInstance.CompleteRequest();
                    return(true);
                }

                IImageSet    imageSet = (IImageSet)retVal;
                MemoryStream ms       = new MemoryStream();

                // saving to a memory stream isn't necessary for jpeg but I'm leaving this in just in case I change the format to png later
                imageSet[imageName].Save(ms, ImageFormat.Png);

                response.Clear();
                //TODO: Parameterize the content type/ImageFormat
                response.ContentType = "image/Png"; // this must match the ImageFormat in the Save call above
                ms.WriteTo(response.OutputStream);
                imageSet.Dispose();
                context.ApplicationInstance.CompleteRequest();
            }
            catch (Exception ex)
            {
                LogManager.CurrentLog.AddEntry("An error occurred processing PixelServer request:\r\n Parameters: {0}", ex, new string[] { parameters.ToString() });
            }

            return(true);
        }
예제 #2
0
        public void Test()
        {
            IImageSet          imageSet1  = CreateImageSet("Patient1", "Patient1");
            IImageSet          imageSet2  = CreateImageSet("Patient1", "Patient1");
            ImageSetCollection collection = new ImageSetCollection();

            collection.Add(imageSet1);
            collection.Add(imageSet2);

            ImageSetGroups groups = new ImageSetGroups(collection);

            Assert.IsTrue(groups.Root.Items.Count == 0);
            Assert.IsTrue(groups.Root.ChildGroups.Count == 1);
            Assert.IsTrue(groups.Root.ChildGroups[0].Items.Count == 2);

            imageSet1.Dispose();
            imageSet2.Dispose();
        }
예제 #3
0
        private void BuildFromStudy(Study study)
        {
            IImageSet existing = GetImageSet(study.StudyInstanceUid);


            //if (existing != null)
            //{
            //    var descriptor = (IDicomImageSetDescriptor)existing.Descriptor;
            //    if (descriptor.LoadStudyError == null)
            //    {
            //        // Abort if valid image set has already been added.
            //        return;
            //    }
            //}

            var imageSet = CreateImageSet(GetStudyIdentifier(study));

            if (imageSet.Uid != study.StudyInstanceUid)
            {
                throw new InvalidOperationException("ImageSet Uid must be the same as Study Instance Uid.");
            }

            SortSeries(study.Series);

            foreach (Series series in study.Series)
            {
                SortSops(series.Sops);
            }

            FillImageSet(imageSet, study);

            if (existing == null)
            {
                AddImageSet(imageSet);
            }
            else
            {
                LogicalWorkspace.ImageSets[LogicalWorkspace.ImageSets.IndexOf(existing)] = imageSet;
                existing.Dispose();
            }
        }