LEADTOOLS (Leadtools assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
WindowLevelExt Method
See Also 
Leadtools Namespace > RasterImage Class : WindowLevelExt Method



lowBit
Value indicating the low bit used for leveling. 0 <= RasterImage.LowBit <= RasterImage.HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
highBit
Value indicating the high bit used for leveling. 0 <= RasterImage.LowBit <= RasterImage.HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
palette
Optional 16-bit lookup table that can be used to implement a user defined conversion. For every intensity value between 0 and 2 raised to the power of (RasterImage.HighBit - RasterImage.LowBit + 1)-1 there should be a corresponding entry in the lookup table that contains a color. If palette is null (Nothing in Visual Basic), the conversion is a normal shift (right or left) and the painted image is 8 or 16-bit grayscale. If palette is not null (Nothing in Visual Basic), the painted image is a 48-bit image.
mode
Value indicating whether palette is used by the paint and image processing methods or only by the paint methods.
lowBit
Value indicating the low bit used for leveling. 0 <= RasterImage.LowBit <= RasterImage.HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
highBit
Value indicating the high bit used for leveling. 0 <= RasterImage.LowBit <= RasterImage.HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
palette
Optional 16-bit lookup table that can be used to implement a user defined conversion. For every intensity value between 0 and 2 raised to the power of (RasterImage.HighBit - RasterImage.LowBit + 1)-1 there should be a corresponding entry in the lookup table that contains a color. If palette is null (Nothing in Visual Basic), the conversion is a normal shift (right or left) and the painted image is 8 or 16-bit grayscale. If palette is not null (Nothing in Visual Basic), the painted image is a 48-bit image.
mode
Value indicating whether palette is used by the paint and image processing methods or only by the paint methods.
Sets up the paint or paint and image processing methods' window leveling options for this RasterImageSupported in Silverlight, Windows Phone 7

Syntax

Visual Basic (Declaration) 
Public Sub WindowLevelExt( _
   ByVal lowBit As Integer, _
   ByVal highBit As Integer, _
   ByVal palette() As RasterColor16, _
   ByVal mode As RasterWindowLevelMode _
) 
Visual Basic (Usage)Copy Code
Dim instance As RasterImage
Dim lowBit As Integer
Dim highBit As Integer
Dim palette() As RasterColor16
Dim mode As RasterWindowLevelMode
 
instance.WindowLevelExt(lowBit, highBit, palette, mode)
C# 
public void WindowLevelExt( 
   int lowBit,
   int highBit,
   RasterColor16[] palette,
   RasterWindowLevelMode mode
)
C++/CLI 
public:
void WindowLevelExt( 
   int lowBit,
   int highBit,
   array<RasterColor16>^ palette,
   RasterWindowLevelMode mode
) 

Parameters

lowBit
Value indicating the low bit used for leveling. 0 <= RasterImage.LowBit <= RasterImage.HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
highBit
Value indicating the high bit used for leveling. 0 <= RasterImage.LowBit <= RasterImage.HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
palette
Optional 16-bit lookup table that can be used to implement a user defined conversion. For every intensity value between 0 and 2 raised to the power of (RasterImage.HighBit - RasterImage.LowBit + 1)-1 there should be a corresponding entry in the lookup table that contains a color. If palette is null (Nothing in Visual Basic), the conversion is a normal shift (right or left) and the painted image is 8 or 16-bit grayscale. If palette is not null (Nothing in Visual Basic), the painted image is a 48-bit image.
mode
Value indicating whether palette is used by the paint and image processing methods or only by the paint methods.

Example

Visual BasicCopy Code
Public Sub WindowLevelExtExample()
      Dim codecs As RasterCodecs = New RasterCodecs()
      ' Load a 16-bit grayscale image
      Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE2.DCM"))

      ' Get the min and max values
      Dim minMaxBitsCmd As MinMaxBitsCommand = New MinMaxBitsCommand()
      minMaxBitsCmd.Run(image)

      Dim minMaxValuesCmd As MinMaxValuesCommand = New MinMaxValuesCommand()
      minMaxValuesCmd.Run(image)

      Dim lowBit As Integer = minMaxBitsCmd.MinimumBit
      Dim highBit As Integer = minMaxBitsCmd.MaximumBit

      Dim size As Integer = (1 << (image.HighBit - image.LowBit + 1))
      Dim palette As RasterColor16() = New RasterColor16(size - 1) {}

      ' fill the first half of the LUT with RED
      Dim x As Integer = 0
      Do While x < size / 2
         palette(x).R = RasterColor16.MaximumComponent
         palette(x).G = 0
         palette(x).B = 0
         palette(x).Reserved = 0
         x += 1
      Loop

      Dim minVal As Integer = minMaxValuesCmd.MinimumValue
      Dim maxVal As Integer = minMaxValuesCmd.MaximumValue

      ' Fill the rest with gray values 
      x = (size \ 2)
      Do While x < size
         palette(x).R = Convert.ToUInt16(Math.Min(RasterColor16.MaximumComponent, (Convert.ToUInt32(x - minVal) * RasterColor16.MaximumComponent) / (maxVal - minVal)))
         palette(x).G = palette(x).R
         palette(x).B = palette(x).R
         palette(x).Reserved = 0
         x += 1
      Loop
      image.WindowLevelExt(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing)

      codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_WindowLevel.BMP"), RasterImageFormat.Bmp, 0)

      image.Dispose()
      codecs.Dispose()
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
public void WindowLevelExtExample()
   {
      RasterCodecs codecs = new RasterCodecs();
      // Load a 16-bit grayscale image
      RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir,"IMAGE2.DCM"));

      // Get the min and max values
      MinMaxBitsCommand minMaxBitsCmd = new MinMaxBitsCommand();
      minMaxBitsCmd.Run(image);

      MinMaxValuesCommand minMaxValuesCmd = new MinMaxValuesCommand();
      minMaxValuesCmd.Run(image);

      int lowBit = minMaxBitsCmd.MinimumBit;
      int highBit = minMaxBitsCmd.MaximumBit;

      int size = (1 << (image.HighBit - image.LowBit + 1));
      RasterColor16[] palette = new RasterColor16[size];

      // fill the first half of the LUT with RED
      for(int x = 0; x < size / 2; x++)
      {
         palette[x].R = RasterColor16.MaximumComponent;
         palette[x].G = 0;
         palette[x].B = 0;
         palette[x].Reserved = 0;
      }

      int minVal = minMaxValuesCmd.MinimumValue;
      int maxVal = minMaxValuesCmd.MaximumValue;

      // Fill the rest with gray values 
      for(int x = (size / 2); x < size; x++)
      {
         palette[x].R = Convert.ToUInt16(Math.Min(RasterColor16.MaximumComponent, (Convert.ToUInt32(x - minVal) * RasterColor16.MaximumComponent) / (maxVal - minVal)));
         palette[x].G = palette[x].R;
         palette[x].B = palette[x].R;
         palette[x].Reserved = 0;
      }
      image.WindowLevelExt(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing);

      codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1_WindowLevel.BMP"), RasterImageFormat.Bmp, 0);

      image.Dispose();
      codecs.Dispose();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
public void WindowLevelExtExample(RasterImage image, Stream destStream)
{
   // Get the min and max values
   MinMaxBitsCommand minMaxBitsCmd = new MinMaxBitsCommand();
   minMaxBitsCmd.Run(image);
   MinMaxValuesCommand minMaxValuesCmd = new MinMaxValuesCommand();
   minMaxValuesCmd.Run(image);

   int lowBit = minMaxBitsCmd.MinimumBit;
   int highBit = minMaxBitsCmd.MaximumBit;

   int size = (1 << (image.HighBit - image.LowBit + 1));
   RasterColor16[] palette = new RasterColor16[size];

   // fill the first half of the LUT with RED
   for (int x = 0; x < size / 2; x++)
   {
      palette[x].R = RasterColor16.MaximumComponent;
      palette[x].G = 0;
      palette[x].B = 0;
      palette[x].Reserved = 0;
   }

   int minVal = minMaxValuesCmd.MinimumValue;
   int maxVal = minMaxValuesCmd.MaximumValue;

   // Fill the rest with gray values 
   for (int x = (size / 2); x < size; x++)
   {
      palette[x].R = Convert.ToUInt16(Math.Min(RasterColor16.MaximumComponent, (Convert.ToUInt32(x - minVal) * RasterColor16.MaximumComponent) / (maxVal - minVal)));
      palette[x].G = palette[x].R;
      palette[x].B = palette[x].R;
      palette[x].Reserved = 0;
   }
   image.WindowLevelExt(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing);

   RasterCodecs codecs = new RasterCodecs();
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 0);

   image.Dispose();
}
SilverlightVBCopy Code
Public Sub WindowLevelExtExample(ByVal image As RasterImage, ByVal destStream As Stream)
   ' Get the min and max values
   Dim minMaxBitsCmd As MinMaxBitsCommand = New MinMaxBitsCommand()
   minMaxBitsCmd.Run(image)
   Dim minMaxValuesCmd As MinMaxValuesCommand = New MinMaxValuesCommand()
   minMaxValuesCmd.Run(image)

   Dim lowBit As Integer = minMaxBitsCmd.MinimumBit
   Dim highBit As Integer = minMaxBitsCmd.MaximumBit

   Dim size As Integer = (1 << (image.HighBit - image.LowBit + 1))
   Dim palette As RasterColor16() = New RasterColor16(size - 1){}

   ' fill the first half of the LUT with RED
   Dim x As Integer = 0
   Do While x < size / 2
      palette(x).R = RasterColor16.MaximumComponent
      palette(x).G = 0
      palette(x).B = 0
      palette(x).Reserved = 0
      x += 1
   Loop

   Dim minVal As Integer = minMaxValuesCmd.MinimumValue
   Dim maxVal As Integer = minMaxValuesCmd.MaximumValue

   ' Fill the rest with gray values 
   x = (size / 2)
   Do While x < size
      palette(x).R = Convert.ToUInt16(Math.Min(RasterColor16.MaximumComponent, (Convert.ToUInt32(x - minVal) * RasterColor16.MaximumComponent) / (maxVal - minVal)))
      palette(x).G = palette(x).R
      palette(x).B = palette(x).R
      palette(x).Reserved = 0
      x += 1
   Loop
   image.WindowLevelExt(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing)

   Dim codecs As RasterCodecs = New RasterCodecs()
   codecs.Save(image, destStream, RasterImageFormat.Bmp, 0)

   image.Dispose()
End Sub

Remarks

This method is available in the (Document/Medical only) Toolkits.

Provides "on demand" window leveling for the paint methods and does not alter the image data. To convert the image data to a window leveled image, use WindowLevelExt.

If RasterWindowLevelMode.PaintAndProcessing is specified, then all image processing methods will take the palette into account.

Only TIFF and DICOM file formats are capable of saving images that have been window-leveled. Images can be window-leveled by calling WindowLevelExt and specifying RasterWindowLevelMode.PaintAndProcessing for the mode parameter, by using the WindowLevelExt or by loading an image from a file format that supports Window Leveling. If a window-leveled image is saved as any other file format, the image data will be converted before being saved. For more information, refer to Saving Window-Leveled Images.

For a version of this function that uses an 8-bit palette, see WindowLevel.

For more information, refer to Introduction to Image Processing With LEADTOOLS.

For more information, refer to Grayscale Images.

Requirements

Target Platforms: Silverlight, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only), Windows Phone 7

See Also