public class WindowLevelEffect : ShaderEffect
Public Class WindowLevelEffect
Inherits System.Windows.Media.Effects.ShaderEffect
Implements System.Windows.Media.Animation.IAnimatable
public ref class WindowLevelEffect : public System.Windows.Media.Effects.ShaderEffect, System.Windows.Media.Animation.IAnimatable
Provides "on demand" window-leveling as an effect and does not alter the image data.
To learn more about window-leveling, refer to RasterImage.WindowLevel, RasterImage.WindowLevelExt, WindowLevelCommand, Leadtools.ImageProcessing.Core.WindowLevelExtCommand, Saving Window-Leveled Images , and Changing Brightness and Contrast.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.Windows.Controls;
using Leadtools.Windows.Media;
using Leadtools.Windows.Media.Effects;
class WindowLevelEffectExampleWindow : Window
{
public WindowLevelEffectExampleWindow()
{
StackPanel sp = new StackPanel();
Content = sp;
RasterImageViewer theViewer = new RasterImageViewer();
theViewer.HorizontalAlignment = HorizontalAlignment.Center;
theViewer.VerticalAlignment = VerticalAlignment.Top;
theViewer.ImageHorizontalAlignment = HorizontalAlignment.Left;
theViewer.ImageVerticalAlignment = VerticalAlignment.Top;
sp.Children.Add(theViewer);
// Load an image into the viewer
using (RasterCodecs codecs = new RasterCodecs())
{
theViewer.Image = codecs.Load(System.IO.Path.Combine(LEAD_VARS.ImagesDir, "Image3.dcm"));
}
// Create the sliders
TextBlock tb = new TextBlock();
tb.HorizontalAlignment = HorizontalAlignment.Center;
tb.Text = "Window Width:";
sp.Children.Add(tb);
Slider windowWidthSlider = new Slider();
windowWidthSlider.Minimum = 0.0;
windowWidthSlider.Maximum = Math.Pow(2, theViewer.Image.BitsPerPixel - 1);
windowWidthSlider.Width = 400;
windowWidthSlider.Orientation = Orientation.Horizontal;
windowWidthSlider.IsSnapToTickEnabled = true;
windowWidthSlider.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.BottomRight;
windowWidthSlider.TickFrequency = 0.1;
windowWidthSlider.AutoToolTipPrecision = 2;
windowWidthSlider.AutoToolTipPlacement = System.Windows.Controls.Primitives.AutoToolTipPlacement.BottomRight;
sp.Children.Add(windowWidthSlider);
tb = new TextBlock();
tb.HorizontalAlignment = HorizontalAlignment.Center;
tb.Text = "Window Center:";
sp.Children.Add(tb);
Slider windowCenterSlider = new Slider();
windowCenterSlider.Minimum = 0.0;
windowCenterSlider.Maximum = Math.Pow(2, theViewer.Image.BitsPerPixel - 1);
windowCenterSlider.Width = 400;
windowCenterSlider.Orientation = Orientation.Horizontal;
windowCenterSlider.IsSnapToTickEnabled = true;
windowCenterSlider.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.BottomRight;
windowCenterSlider.TickFrequency = 0.1;
windowCenterSlider.AutoToolTipPrecision = 2;
windowCenterSlider.AutoToolTipPlacement = System.Windows.Controls.Primitives.AutoToolTipPlacement.BottomRight;
sp.Children.Add(windowCenterSlider);
// Setup the effect
WindowLevelEffect effect = new WindowLevelEffect();
// Set the texture
effect.FillGrayTexture(theViewer.Image);
effect.Start = Colors.Black;
effect.End = Colors.White;
effect.CurveType = CurveType.Linear;
effect.Factor = 0.0;
effect.WindowWidth = Math.Pow(2, theViewer.Image.MaxValue - theViewer.Image.MinValue);
effect.WindowCenter = effect.WindowWidth / 2;
theViewer.ImageEffect = effect;
// Bind the properties
Binding bind = new Binding();
bind.Source = effect;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
bind.Path = new PropertyPath("WindowWidth");
windowWidthSlider.SetBinding(Slider.ValueProperty, bind);
bind = new Binding();
bind.Source = effect;
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
bind.Path = new PropertyPath("WindowCenter");
windowCenterSlider.SetBinding(Slider.ValueProperty, bind);
Title = "Using WindowLevelEffect";
}
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS21\Resources\Images";
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.Windows.Controls
Imports Leadtools.Windows.Media
Imports Leadtools.Windows.Media.Effects
Class WindowLevelEffectExampleWindow
Inherits Window
Public Sub New()
Dim sp As New StackPanel()
Content = sp
Dim theViewer As New RasterImageViewer()
theViewer.HorizontalAlignment = HorizontalAlignment.Center
theViewer.VerticalAlignment = VerticalAlignment.Top
theViewer.ImageHorizontalAlignment = HorizontalAlignment.Left
theViewer.ImageVerticalAlignment = VerticalAlignment.Top
sp.Children.Add(theViewer)
' Load an image into the viewer
Using codecs As New RasterCodecs()
theViewer.Image = codecs.Load(System.IO.Path.Combine(LEAD_VARS.ImagesDir, "Image3.dcm"))
End Using
' Create the sliders
Dim tb As New TextBlock()
tb.HorizontalAlignment = HorizontalAlignment.Center
tb.Text = "Window Width:"
sp.Children.Add(tb)
Dim windowWidthSlider As New Slider()
windowWidthSlider.Minimum = 0.0
windowWidthSlider.Maximum = Math.Pow(2, theViewer.Image.BitsPerPixel - 1)
windowWidthSlider.Width = 400
windowWidthSlider.Orientation = Orientation.Horizontal
windowWidthSlider.IsSnapToTickEnabled = True
windowWidthSlider.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.BottomRight
windowWidthSlider.TickFrequency = 0.1
windowWidthSlider.AutoToolTipPrecision = 2
windowWidthSlider.AutoToolTipPlacement = System.Windows.Controls.Primitives.AutoToolTipPlacement.BottomRight
sp.Children.Add(windowWidthSlider)
tb = New TextBlock()
tb.HorizontalAlignment = HorizontalAlignment.Center
tb.Text = "Window Center:"
sp.Children.Add(tb)
Dim windowCenterSlider As New Slider()
windowCenterSlider.Minimum = 0.0
windowCenterSlider.Maximum = Math.Pow(2, theViewer.Image.BitsPerPixel - 1)
windowCenterSlider.Width = 400
windowCenterSlider.Orientation = Orientation.Horizontal
windowCenterSlider.IsSnapToTickEnabled = True
windowCenterSlider.TickPlacement = System.Windows.Controls.Primitives.TickPlacement.BottomRight
windowCenterSlider.TickFrequency = 0.1
windowCenterSlider.AutoToolTipPrecision = 2
windowCenterSlider.AutoToolTipPlacement = System.Windows.Controls.Primitives.AutoToolTipPlacement.BottomRight
sp.Children.Add(windowCenterSlider)
' Setup the effect
Dim effect As New WindowLevelEffect()
' Set the texture
effect.FillGrayTexture(theViewer.Image)
effect.Start = Colors.Black
effect.End = Colors.White
effect.CurveType = CurveType.Linear
effect.Factor = 0.0
effect.WindowWidth = Math.Pow(2, theViewer.Image.MaxValue - theViewer.Image.MinValue)
effect.WindowCenter = effect.WindowWidth / 2
theViewer.ImageEffect = effect
' Bind the properties
Dim bind As New Binding()
bind.Source = effect
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
bind.Path = New PropertyPath("WindowWidth")
windowWidthSlider.SetBinding(Slider.ValueProperty, bind)
bind = New Binding()
bind.Source = effect
bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
bind.Path = New PropertyPath("WindowCenter")
windowCenterSlider.SetBinding(Slider.ValueProperty, bind)
Title = "Using WindowLevelEffect"
End Sub
End Class
Public NotInheritable Class LEAD_VARS
Public Const ImagesDir As String = "C:\LEADTOOLS21\Resources\Images"
End Class
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document