- 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 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 (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-bit grayscale. If palette is not null (Nothing in Visual Basic), 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.
Visual Basic (Declaration) | |
---|---|
Public Sub WindowLevel( _ ByVal lowBit As Integer, _ ByVal highBit As Integer, _ ByVal palette() As RasterColor, _ ByVal mode As RasterWindowLevelMode _ ) |
Visual Basic (Usage) | Copy Code |
---|---|
Dim instance As RasterImage Dim lowBit As Integer Dim highBit As Integer Dim palette() As RasterColor Dim mode As RasterWindowLevelMode instance.WindowLevel(lowBit, highBit, palette, mode) |
C# | |
---|---|
public void WindowLevel( int lowBit, int highBit, RasterColor[] palette, RasterWindowLevelMode mode ) |
C++/CLI | |
---|---|
public: void WindowLevel( int lowBit, int highBit, array<RasterColor>^ 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 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 (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-bit grayscale. If palette is not null (Nothing in Visual Basic), 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.
Visual Basic | Copy Code |
---|---|
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# | Copy Code |
---|---|
public void WindowLevelExample() { RasterCodecs codecs = new RasterCodecs(); // Load an image that has BottomLeft ViewPerspective RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "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(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"; } |
SilverlightCSharp | Copy Code |
---|---|
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(); } |
SilverlightVB | Copy Code |
---|---|
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 |
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 Leadtools.ImageProcessing.Core.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 Leadtools.ImageProcessing.Core.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.
For more information, refer to Introduction to Image Processing With LEADTOOLS.
For more information, refer to Grayscale Images.
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