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; }
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); } } }
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(); }
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); } } }
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(); } }