Sets up the paint or paint and image processing methods' window leveling options for this RasterImage
public void WindowLevel(
int lowBit,
int highBit,
RasterColor[] palette,
RasterWindowLevelMode mode
)
Public Sub WindowLevel( _
ByVal lowBit As Integer, _
ByVal highBit As Integer, _
ByVal palette() As RasterColor, _
ByVal mode As RasterWindowLevelMode _
)
- (BOOL)windowLevel:(NSInteger)lowBitValue
highBit:(NSInteger)highBitValue
palette:(nullable NSArray<LTRasterColor *> *)palette
mode:(LTRasterWindowLevelMode)mode
error:(NSError **)error
public void windowLevel(
int lowBit,
int highBit,
RasterColor[] palette,
RasterWindowLevelMode mode
)
public:
void WindowLevel(
int lowBit,
int highBit,
array<RasterColor>^ palette,
RasterWindowLevelMode mode
)
lowBit
Value indicating the low bit used for leveling. 0 <= LowBit <= HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
highBit
Value indicating the high bit used for leveling. 0 <= LowBit <= HighBit <= (11 for 12-bit grayscale or 15 for 16-bit grayscale).
palette
Optional 8-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 (HighBit - LowBit + 1)-1 there should be a corresponding entry in the lookup table that contains a color. If palette is null, the conversion is a normal shift (right or left) and the painted image is 8-bit grayscale. If palette is not null, the painted image is a 24-bit image.
mode
Value indicating whether palette is used by the paint and image processing methods or only by the paint methods.
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 WindowLevelCommand.
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 WindowLevel and specifying RasterWindowLevelMode.PaintAndProcessing for the mode parameter, by using the WindowLevelCommand 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
For a version of this function that uses an 8-bit palette, see WindowLevelExt.
Saving Window-Leveled Images. LEADTOOLS supports two types of LUTs for 10-16-bit grayscale images (8-bit LUT and 16-bit LUT). Typical grayscale image display and processing is done using an 8-bit LUT. But, you can also use a 16-bit LUT, which offers more precision. Some special video cards and monitors also support display of grayscale images using a 16-bit LUT.
For more information, refer to Introduction to Image Processing With LEADTOOLS.
For more information, refer to Grayscale Images.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Dicom;
using Leadtools.Drawing;
using Leadtools.Controls;
using LeadtoolsExamples.Common;
using Leadtools.Svg;
public void WindowLevelExample()
{
RasterCodecs codecs = new RasterCodecs();
// Load an image that has BottomLeft ViewPerspective
RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path, "IMAGE1.CMP"));
// Change the image to 16-bit grayscale
GrayscaleCommand grayscaleCmd = new GrayscaleCommand(16);
grayscaleCmd.Run(image);
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));
RasterColor[] palette = new RasterColor[size];
// fill the first half of the LUT with RED
for (int x = 0; x < size / 2; x++)
{
palette[x].R = 255;
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.ToByte(Math.Min(255, ((x - minVal) * 255 / (maxVal - minVal))));
palette[x].G = palette[x].R;
palette[x].B = palette[x].R;
palette[x].Reserved = 0;
}
image.WindowLevel(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing);
codecs.Save(image, Path.Combine(ImagesPath.Path, "IMAGE1_WindowLevel.BMP"), RasterImageFormat.Bmp, 0);
image.Dispose();
codecs.Dispose();
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Controls
Imports Leadtools.Dicom
Imports Leadtools.Drawing
Imports Leadtools.Svg
Public Sub WindowLevelExample()
Dim codecs As RasterCodecs = New RasterCodecs()
' Load an image that has BottomLeft ViewPerspective
Dim image As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE1.CMP"))
' Change the image to 16-bit grayscale
Dim grayscaleCmd As GrayscaleCommand = New GrayscaleCommand(16)
grayscaleCmd.Run(image)
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 RasterColor() = New RasterColor(size - 1) {}
' fill the first half of the LUT with RED
Dim x As Integer = 0
Do While x < size / 2
palette(x).R = 255
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.ToByte(Math.Min(255, ((x - minVal) * 255 / (maxVal - minVal))))
palette(x).G = palette(x).R
palette(x).B = palette(x).R
palette(x).Reserved = 0
x += 1
Loop
image.WindowLevel(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#[Silverlight C# Example]
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Dicom;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.ImageProcessing.Color;
using Leadtools.Examples;
using Leadtools.Windows.Media;
public void WindowLevelExample(RasterImage image, Stream destStream)
{
// Change the image to 16-bit grayscale
GrayscaleCommand grayscaleCmd = new GrayscaleCommand(16);
grayscaleCmd.Run(image);
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));
RasterColor[] palette = new RasterColor[size];
// fill the first half of the LUT with RED
for (int x = 0; x < size / 2; x++)
{
palette[x].R = 255;
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.ToByte(Math.Min(255, ((x - minVal) * 255 / (maxVal - minVal))));
palette[x].G = palette[x].R;
palette[x].B = palette[x].R;
palette[x].Reserved = 0;
}
image.WindowLevel(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing);
RasterCodecs codecs = new RasterCodecs();
codecs.Save(image, destStream, RasterImageFormat.Bmp, 0);
image.Dispose();
}
vb[Silverlight VB Example]
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.Dicom
Imports Leadtools.ImageProcessing
Imports Leadtools.ImageProcessing.Core
Imports Leadtools.ImageProcessing.Color
Imports Leadtools.Windows.Media
Public Sub WindowLevelExample(ByVal image As RasterImage, ByVal destStream As Stream)
' Change the image to 16-bit grayscale
Dim grayscaleCmd As GrayscaleCommand = New GrayscaleCommand(16)
grayscaleCmd.Run(image)
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 RasterColor() = New RasterColor(size - 1) {}
' fill the first half of the LUT with RED
Dim x As Integer = 0
Do While x < size / 2
palette(x).R = 255
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.ToByte(Math.Min(255, ((x - minVal) * 255 / (maxVal - minVal))))
palette(x).G = palette(x).R
palette(x).B = palette(x).R
palette(x).Reserved = 0
x += 1
Loop
image.WindowLevel(lowBit, highBit, palette, RasterWindowLevelMode.PaintAndProcessing)
Dim codecs As RasterCodecs = New RasterCodecs()
codecs.Save(image, destStream, RasterImageFormat.Bmp, 0)
image.Dispose()
End Sub
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