Exemplo n.º 1
0
        private bool ShowImage()
        {
            try
            {
                DicomElement element = null;
                element = _dsImage.FindFirstElement(null, DemoDicomTags.PixelData, true);
                int bitmapCount = _dsImage.GetImageCount(element);
                if (bitmapCount > 0)
                {
                    FreeImage();
                    if (bitmapCount == 1)
                    {
                        if (element != null)
                        {
                            RasterImage image;

                            image = _dsImage.GetImage(element, 0, 0, RasterByteOrder.Gray, _getImageFlags);

                            _viewer.Image = image;
                        }
                    }
                    else
                    {
                        if (element != null)
                        {
                            LoadBitmapList(element);
                        }
                    }

                    if (element != null)
                    {
                        _imageInfo = _dsImage.GetImageInformation(element, 0);
                    }

                    if ((_dicomAnnotationsUtilities != null) && (_viewer.Image != null))
                    {
                        _dicomAnnotationsUtilities.DisplayWidth  = _viewer.Image.Width;
                        _dicomAnnotationsUtilities.DisplayHeight = _viewer.Image.Height;
                    }

                    return(true);
                }
                else
                {
                    Messager.ShowInformation(this, "Please note that this dataset doesn't include any images.");
                }
            }
            catch (Exception exception)
            {
                System.Diagnostics.Debug.Assert(false);
                throw exception;
            }
            return(false);
        }
Exemplo n.º 2
0
        private void LoadImage(object data)
        {
            DicomDataSet ds    = data as DicomDataSet;
            int          count = 0;
            RasterImage  image = null;

            if (Dataset == null)
            {
                Cell.Image = null;
                return;
            }

            count = ds.GetImageCount(null);
            SetLoadProgress(count > 0, count);
            for (int i = 0; i < count; i++)
            {
                RasterImage img = ds.GetImage(null, i, 0, RasterByteOrder.Rgb | RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyVoiLut | DicomGetImageFlags.AutoScaleModalityLut);

                if (image == null)
                {
                    image = img.Clone();
                }
                else
                {
                    image.AddPage(img);
                }
                SetProgressValue(i + 1);
                Thread.Sleep(0);
            }

            SetCellImage(image);
        }
Exemplo n.º 3
0
        /*
         * Loads an image based on the Referened File ID element
         *
         * Preconditions:
         *   1. element != null
         *   2. element.Tag == DemoDicomTags.ReferencedFileID
         */
        private void DisplayImage(DicomElement element)
        {
            if (!m_DicomDir.DataSet.ExistsElement(element))
            {
                return;
            }

            txtElementValue.Text = "";

            // Get file name
            string strFileName = m_strDicomFilesFolder;

            for (int i = 0; i < m_DicomDir.DataSet.GetElementValueCount(element); i++)
            {
                strFileName += "\\" + m_DicomDir.DataSet.GetStringValue(element, i);
            }

            // Load the data set
            DicomDataSet ImageDS = new DicomDataSet();

            try
            {
                ImageDS.Load(strFileName, DicomDataSetLoadFlags.LoadAndClose);
            }
            catch (Exception ex)
            {
                SetStatus(string.Format("Failed to load DataSet.  Error Message: {0}", ex.Message));
                return;
            }

            // Get the image from the Pixel Data element and display it in the viewer
            try
            {
                DicomElement PixelDataElement = ImageDS.FindFirstElement(null, DemoDicomTags.PixelData, false);
                if (PixelDataElement == null)
                {
                    SetStatus(string.Format("Dataset does not contain an image."));
                    return;
                }

                rasterImageViewer1.Image = ImageDS.GetImage(PixelDataElement,
                                                            0,
                                                            0,
                                                            RasterByteOrder.Rgb,
                                                            DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AutoApplyVoiLut | DicomGetImageFlags.AllowRangeExpansion);
                rasterImageViewer1.Visible = true;
            }
            catch (Exception ex)
            {
                SetStatus(string.Format("Failed to load the image from the DataSet.  Error Message: {0}", ex.Message));
                return;
            }
        }
Exemplo n.º 4
0
        private void OpenDataset(string filename)
        {
            try
            {
                _DataSet.Load(filename, DicomDataSetLoadFlags.LoadAndClose);

                // Find Pixel Data
                _PixelElement = _DataSet.FindFirstElement(null, DicomTag.PixelData, true);
                if (_PixelElement != null)
                {
                    // Load Base Image
#if !LEADTOOLS_V20_OR_LATER
                    DicomGetImageFlags getImageFlags =
                        DicomGetImageFlags.AutoApplyModalityLut |
                        DicomGetImageFlags.AutoApplyVoiLut |
                        DicomGetImageFlags.AutoScaleModalityLut |
                        DicomGetImageFlags.AutoScaleVoiLut |
                        DicomGetImageFlags.AutoDectectInvalidRleCompression |
                        DicomGetImageFlags.AutoLoadOverlays;
#else
                    DicomGetImageFlags getImageFlags =
                        DicomGetImageFlags.AutoApplyModalityLut |
                        DicomGetImageFlags.AutoApplyVoiLut |
                        DicomGetImageFlags.AutoScaleModalityLut |
                        DicomGetImageFlags.AutoScaleVoiLut |
                        DicomGetImageFlags.AutoDetectInvalidRleCompression |
                        DicomGetImageFlags.AutoLoadOverlays;
#endif // #if !LEADTOOLS_V20_OR_LATER

                    _rasterImageViewer.Image = _DataSet.GetImage(_PixelElement, 0, 0, RasterByteOrder.Gray, getImageFlags);
                    LoadOverlays();
                    _mnuOverlaysInsertOverlay.Enabled = true;
                    _mnuFileSave.Enabled = true;
                }
                else
                {
                    Messager.ShowError(this, "NO Pixel Data");
                    _mnuOverlaysInsertOverlay.Enabled = false;
                    _mnuFileSave.Enabled = false;
                }

                EnableOverlayOptions();
            }
            catch (Exception ex)
            {
                Messager.ShowError(this, ex);
            }
            finally
            {
                EnableOverlayOptions();
            }
        }
Exemplo n.º 5
0
        private RasterImage GetImage(DicomDataSet dicomDs)
        {
            DicomElement element = dicomDs.FindFirstElement(null, DicomTag.PixelData, true);

            if (null != element)
            {
                return(dicomDs.GetImage(element,
                                        0,
                                        0,
                                        RasterByteOrder.Gray,
                                        DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AutoApplyVoiLut));
            }
            return(null);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Processes the request.
        /// </summary>
        /// <param name="Context">The context.</param>
        protected virtual void ProcessRequest(HttpListenerContext Context)
        {
            using (DicomDataSet ds = new DicomDataSet())
            {
                try
                {
                    string      file  = Context.Request.QueryString["file"];
                    RasterImage image = null;

                    ds.Load(file, DicomDataSetLoadFlags.None);
                    image = ds.GetImage(null, 0, 0, RasterByteOrder.Rgb | RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AutoApplyVoiLut | DicomGetImageFlags.AllowRangeExpansion);
                    if (image != null)
                    {
                        //
                        // resize the image to smaller
                        //
                        MemoryStream stream = new MemoryStream();

                        SizeWithAspect(image);
                        if (image.Signed || image.GrayscaleMode == RasterGrayscaleMode.OrderedInverse)
                        {
                            ConvertSignedToUnsignedCommand cmd = new ConvertSignedToUnsignedCommand(ConvertSignedToUnsignedCommandType.ShiftNegativeToZero);

                            cmd.Run(image);
                        }

                        Monitor.Enter(this);
                        try
                        {
                            _Codecs.Save(image, stream, RasterImageFormat.Jpeg, 8);
                            Context.Response.ContentType     = "image/jpeg";
                            Context.Response.ContentLength64 = stream.Length;
                            Context.Response.OutputStream.Write(stream.ToArray(), 0, Convert.ToInt32(stream.Length));
                            Context.Response.OutputStream.Close();
                        }
                        finally
                        {
                            Monitor.Exit(this);
                        }
                    }
                }
                catch { }
            }
        }
Exemplo n.º 7
0
        void Convert(DicomDataSet ds)
        {
            DicomElement element;

            element = ds.FindFirstElement(null, DemoDicomTags.PixelData, true);
            if (element == null)
            {
                continue;
            }

            for (int i = 0; i < ds.GetImageCount(element); i++)
            {
                RasterImage           image;
                DicomImageInformation info = ds.GetImageInformation(element, i);
                image = ds.GetImage(element, i, 0, info.IsGray ? RasterByteOrder.Gray : RasterByteOrder.Rgb,
                                    DicomGetImageFlags.AutoApplyModalityLut |
                                    DicomGetImageFlags.AutoApplyVoiLut |
                                    DicomGetImageFlags.AllowRangeExpansion);
                //ds.
            }
        }
Exemplo n.º 8
0
        private void LoadImage(object data)
        {
            DicomDataSet ds    = data as DicomDataSet;
            int          count = 0;
            RasterImage  image = null;

            if (Dataset == null)
            {
                Cell.Image = null;
                return;
            }

            bool         isStructuredDisplay = IsStructuredDisplay(ds);
            DicomElement pixelData           = ds.FindFirstElement(null, DicomTag.PixelData, true);

            if (pixelData == null)
            {
                if (isStructuredDisplay)
                {
                    count = 1;
                }
            }
            else
            {
                count = ds.GetImageCount(pixelData);
            }

            SetLoadProgress(count > 0, count);
            string exceptionMessage = string.Empty;

            for (int i = 0; i < count; i++)
            {
                RasterImage img = null;

                try
                {
                    if (pixelData != null)
                    {
                        img = ds.GetImage(pixelData, i, 0, RasterByteOrder.Rgb | RasterByteOrder.Gray, DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AutoApplyVoiLut | DicomGetImageFlags.AutoScaleModalityLut | DicomGetImageFlags.AutoScaleVoiLut | DicomGetImageFlags.AutoDetectInvalidRleCompression);
                    }
                    else if (isStructuredDisplay)
                    {
                        StructuredDisplayImageOptions sdOptions = new StructuredDisplayImageOptions();
                        sdOptions.ShowOverlay = _optionsAgent.Get <bool>("ExportLayoutIncludeMetadata", true);
                        DicomGetImageFlags getImageFlags = DicomGetImageFlags.AutoScaleModalityLut | DicomGetImageFlags.AutoScaleVoiLut | DicomGetImageFlags.AutoApplyModalityLut | DicomGetImageFlags.AutoApplyVoiLut;
                        img = ds.GetStructuredDisplayImage(GetSopInstanceCallBack, getImageFlags, sdOptions);;
                    }
                }
                catch (Exception ex)
                {
                    exceptionMessage = ex.Message;
                }

                if (img != null)
                {
                    if (image == null)
                    {
                        image = img.Clone();
                    }
                    else
                    {
                        image.AddPage(img);
                    }
                }
                SetProgressValue(i + 1);
                Thread.Sleep(0);
            }

            string photometricInterpretation = GetDicomTag(ds, DicomTag.PhotometricInterpretation);

            if (!string.IsNullOrEmpty(photometricInterpretation))
            {
                Cell.PhotometricInterpretation = photometricInterpretation;
            }

            SetCellInfo(image,
                        ds.GetValue <string>(DicomTag.PatientID, string.Empty),
                        ds.GetValue <string>(DicomTag.PatientName, string.Empty),
                        ds.GetValue <string>(DicomTag.WindowWidth, string.Empty),
                        ds.GetValue <string>(DicomTag.WindowCenter, string.Empty),
                        isStructuredDisplay);

            if (!string.IsNullOrEmpty(exceptionMessage))
            {
                string errorMessage = string.Format("Failed to show image.\n{0}", exceptionMessage);

                if (count > 1)
                {
                    errorMessage = string.Format("Failed to load one or more image frames.\n{0}", exceptionMessage);
                }
                Messager.ShowError(this, errorMessage);
            }
        }