예제 #1
0
        private void InitClass()
        {
            // Initialize the _viewer and add handlers to the DragEnter/DragDrop and KeyDown events
            _viewer             = new ImageViewer();
            _viewer.BorderStyle = BorderStyle.None;
            _viewer.DragEnter  += new DragEventHandler(_viewer_DragEnter);
            _viewer.DragDrop   += new DragEventHandler(_viewer_DragDrop);
            _viewer.KeyDown    += new KeyEventHandler(_viewer_KeyDown);
            _viewer.MouseDown  += new MouseEventHandler(_viewer_MouseDown);
            _viewer.MouseMove  += new MouseEventHandler(_viewer_MouseMove);
            _viewer.MouseUp    += new MouseEventHandler(_viewer_MouseUp);

            _toolTip = new ToolTip();

            _flags = RasterPaletteWindowLevelFlags.Logarithmic |
                     RasterPaletteWindowLevelFlags.DicomStyle | RasterPaletteWindowLevelFlags.Outside;

            Controls.Add(_viewer);
            _viewer.BringToFront();
            _viewer.AllowDrop = true;
            // Set a default RasterPaintProperties and Paint engine to use when displaying images on the viewer
            RasterPaintProperties Prop = new RasterPaintProperties();

            Prop = RasterPaintProperties.Default;
            Prop.PaintDisplayMode   = RasterPaintDisplayModeFlags.FavorBlack;
            Prop.PaintEngine        = RasterPaintEngine.GdiPlus;
            _viewer.PaintProperties = Prop;
        }
예제 #2
0
        public void UpdateDataAfterCommand()
        {
            if (_viewer.Image.GrayscaleMode != RasterGrayscaleMode.None)
            {
                switch (_viewer.Image.BitsPerPixel)
                {
                case 8:
                    _currentPalette = _viewer.Image.GetPalette();
                    _LUTSize        = 256;
                    _minValue       = 0;
                    _maxValue       = 255;
                    _isWLImage      = true;
                    break;

                case 12:
                case 16:
                    _viewer.Image.UseLookupTable = true;
                    _currentPalette = _viewer.Image.GetLookupTable();
                    _highBit        = _viewer.Image.HighBit;
                    if (_highBit == -1)
                    {
                        _highBit = _viewer.Image.BitsPerPixel - 1;
                    }
                    if (_currentPalette == null)
                    {
                        _LUTSize  = (int)Math.Pow(2, _highBit + 1);
                        _maxValue = (_viewer.Image.Signed) ? _LUTSize / 2 - 1 : _LUTSize - 1;
                        _minValue = (_viewer.Image.Signed) ? -_LUTSize / 2 : 0;
                        createPalette();
                    }
                    else
                    {
                        _LUTSize = _currentPalette.Length;
                        MinMaxValuesCommand minMaxValueCmd = new MinMaxValuesCommand();
                        minMaxValueCmd.Run(_viewer.Image);
                        _maxValue = minMaxValueCmd.MaximumValue;
                        _minValue = minMaxValueCmd.MinimumValue;
                    }
                    _isWLImage = true;
                    break;
                }
                _scale    = ((_maxValue - _minValue) / 1000 > 0) ? (_maxValue - _minValue) / 1000 : 1;
                _maxWidth = (int)Math.Pow(2, _viewer.Image.BitsPerPixel) - 1;
                _minWidth = 1;
                _maxLevel = (int)Math.Pow(2, _viewer.Image.BitsPerPixel) - 1;
                _minLevel = (int)Math.Pow(2, _viewer.Image.BitsPerPixel) * -1 + 1;

                if (_viewer.Image.Signed)
                {
                    _flags |= RasterPaletteWindowLevelFlags.Signed;
                    getWindowLevelForSigned(_currentPalette);
                }
                else
                {
                    getWindowLevelForUnSigned(_currentPalette);
                }
            }
        }
예제 #3
0
        private void InitClass()
        {
            _viewer             = new ImageViewer();
            _viewer.BorderStyle = BorderStyle.None;
            _viewer.DragEnter  += new DragEventHandler(_viewer_DragEnter);
            _viewer.DragDrop   += new DragEventHandler(_viewer_DragDrop);
            _viewer.MouseDown  += new MouseEventHandler(_viewer_MouseDown);
            _viewer.MouseMove  += new MouseEventHandler(_viewer_MouseMove);
            _viewer.MouseUp    += new MouseEventHandler(_viewer_MouseUp);

            _toolTip = new ToolTip();

            _flags = RasterPaletteWindowLevelFlags.Logarithmic |
                     RasterPaletteWindowLevelFlags.DicomStyle | RasterPaletteWindowLevelFlags.Outside;

            Controls.Add(_viewer);
            _viewer.BringToFront();
            _viewer.AllowDrop = true;
            _undoList         = new UndoRedo();
        }
예제 #4
0
        public static void WindowLevel(RasterImage image, params string[] parameters)
        {
            if (parameters.Length >= 3)
            {
                int  width, center;
                bool inverted;

                if (!int.TryParse(parameters[0], out width))
                {
                    return;
                }

                if (!int.TryParse(parameters[1], out center))
                {
                    return;
                }

                if (!bool.TryParse(parameters[2], out inverted))
                {
                    return;
                }

                int nLowBit  = image.LowBit;
                int nHighBit = image.HighBit;
                if (nHighBit == -1)
                {
                    nHighBit = image.BitsPerPixel - 1;
                }

                int uLUTLen = 1 << (nHighBit - image.LowBit + 1);

                int nFrom = center - (width >> 1);
                int nTo   = center + ((width + 1) >> 1);

                int nFullMinValue;
                int nFullMaxValue;

                int nLookupTableLength = 0;
                if (image.GetLookupTable() != null)
                {
                    nLookupTableLength = image.GetLookupTable().Length;
                }

                if (image.BitsPerPixel == 8)
                {
                    nFullMinValue = 0;
                    nFullMaxValue = 255;
                }
                else
                {
                    if (nLookupTableLength == 0)
                    {
                        nFullMinValue = !image.Signed ? 0 : -(0xffff + 1) / 2;
                        nFullMaxValue = !image.Signed ? 0xffff - 1 : (0xffff + 1) / 2 - 1;
                    }
                    else
                    {
                        nFullMinValue = !image.Signed ? 0 : -(nLookupTableLength + 1) / 2;
                        nFullMaxValue = !image.Signed ? nLookupTableLength - 1 : (nLookupTableLength + 1) / 2 - 1;
                    }
                }


                RasterColor[] lookUpTable = new RasterColor[uLUTLen];

                RasterPaletteWindowLevelFlags flags = ((image.Signed) ? RasterPaletteWindowLevelFlags.Signed : RasterPaletteWindowLevelFlags.None) | RasterPaletteWindowLevelFlags.Outside | RasterPaletteWindowLevelFlags.Linear | RasterPaletteWindowLevelFlags.DicomStyle;


                RasterColor startColor = new RasterColor(0, 0, 0);
                RasterColor endColor   = new RasterColor(255, 255, 255);
                RasterPalette.WindowLevelFillLookupTable(lookUpTable, (!inverted) ? startColor : endColor, (!inverted) ? endColor : startColor, nFrom, nTo, nLowBit, nHighBit, nFullMinValue, nFullMaxValue, 1, flags);

                if (image.BitsPerPixel == 8)
                {
                    image.SetPalette(lookUpTable, 0, 256);
                }
                else
                {
                    image.WindowLevel(nLowBit, nHighBit, lookUpTable, RasterWindowLevelMode.PaintAndProcessing);
                }
            }
        }
예제 #5
0
        public void Initialize(ImageInformation info, RasterPaintProperties paintProperties, bool snap)
        {
            _viewer.BeginUpdate();
            UpdatePaintProperties(paintProperties);
            _viewer.Image = info.Image;
            if (_viewer.Image != null)
            {
                _viewer.Image.Changed += new EventHandler <RasterImageChangedEventArgs>(Image_Changed);
            }
            _name = info.Name;
            if (snap)
            {
                Snap();
            }
            UpdateCaption();
            _viewer.EndUpdate();

            _isWLImage  = false;
            _isMagGlass = false;

            if (_viewer.Image.GrayscaleMode != RasterGrayscaleMode.None)
            {
                switch (_viewer.Image.BitsPerPixel)
                {
                case 8:
                    _currentPalette = _viewer.Image.GetPalette();
                    _LUTSize        = 256;
                    _minValue       = 0;
                    _maxValue       = 255;
                    _isWLImage      = true;
                    break;

                case 12:
                case 16:
                    _viewer.Image.UseLookupTable = true;
                    _currentPalette = _viewer.Image.GetLookupTable();
                    _highBit        = _viewer.Image.HighBit;
                    if (_highBit == -1)
                    {
                        _highBit = _viewer.Image.BitsPerPixel - 1;
                    }
                    if (_currentPalette == null)
                    {
                        _LUTSize  = (int)Math.Pow(2, _highBit + 1);
                        _maxValue = (_viewer.Image.Signed) ? _LUTSize / 2 - 1 : _LUTSize - 1;
                        _minValue = (_viewer.Image.Signed) ? -_LUTSize / 2 : 0;
                    }
                    else
                    {
                        _LUTSize = _currentPalette.Length;
                        MinMaxValuesCommand minMaxValueCmd = new MinMaxValuesCommand();
                        minMaxValueCmd.Run(_viewer.Image);
                        _maxValue = minMaxValueCmd.MaximumValue;
                        _minValue = minMaxValueCmd.MinimumValue;
                    }
                    _isWLImage = true;
                    break;
                }
                _scale             = ((_maxValue - _minValue) / 1000 > 0) ? (_maxValue - _minValue) / 1000 : 1;
                _maxWidth          = (int)Math.Pow(2, _viewer.Image.BitsPerPixel) - 1;
                _minWidth          = 1;
                _maxLevel          = (int)Math.Pow(2, _viewer.Image.BitsPerPixel) - 1;
                _minLevel          = (int)Math.Pow(2, _viewer.Image.BitsPerPixel) * -1 + 1;
                _windowLevelCenter = (_maxValue + _minValue) / 2;
                _windowLevelWidth  = _maxValue - _minValue;
                if (_viewer.Image.Signed)
                {
                    _flags |= RasterPaletteWindowLevelFlags.Signed;
                }
                ChangeThePalette();
            }
        }