Leadtools Namespace > RasterImage Class : WindowLevelExt Method |
public void WindowLevelExt( int lowBit, int highBit, RasterColor16[] palette, RasterWindowLevelMode mode )
'Declaration Public Sub WindowLevelExt( _ ByVal lowBit As Integer, _ ByVal highBit As Integer, _ ByVal palette() As RasterColor16, _ ByVal mode As RasterWindowLevelMode _ )
'Usage 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)
public void WindowLevelExt( int lowBit, int highBit, RasterColor16[] palette, RasterWindowLevelMode mode )
-(BOOL)windowLevelExt:(int)lowBitValue highBit:(int)highBitValue palette:(NSArray*)palette mode:(LTRasterWindowLevelMode) mode error:(NSError**)outError;
public void windowLevelExt( int lowBit, int highBit, RasterColor16[] palette, RasterWindowLevelMode mode )
public: void WindowLevelExt( int lowBit, int highBit, array<RasterColor16>^ palette, RasterWindowLevelMode mode )
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.
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 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.
Imports Leadtools Imports Leadtools.Codecs Imports Leadtools.ImageProcessing Imports Leadtools.ImageProcessing.Core Imports Leadtools.ImageProcessing.Color Imports Leadtools.WinForms Imports Leadtools.Dicom Imports Leadtools.Drawing 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
using Leadtools; using Leadtools.Codecs; using Leadtools.ImageProcessing; using Leadtools.ImageProcessing.Core; using Leadtools.ImageProcessing.Color; using Leadtools.WinForms; using Leadtools.Dicom; using Leadtools.Drawing; public void WindowLevelExtExample() { RasterCodecs codecs = new RasterCodecs(); // Load a 16-bit grayscale image RasterImage image = codecs.Load(Path.Combine(ImagesPath.Path,"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(ImagesPath.Path, "IMAGE1_WindowLevel.BMP"), RasterImageFormat.Bmp, 0); image.Dispose(); codecs.Dispose(); }
RasterImageExamples.prototype.WindowLevelExtExample = function () { Tools.SetLicense(); with (Leadtools) { with (Leadtools.Codecs) { with (Leadtools.ImageProcessing.Core) { var codecs = new RasterCodecs(); // Load a 16-bit grayscale image var srcFileName = "Assets\\IMAGE2.DCM"; var image; return Tools.AppInstallFolder().getFileAsync(srcFileName).then(function (loadFile) { return codecs.loadAsync(LeadStreamFactory.create(loadFile)) }) .then(function (img) { image = img; // Get the min and max values var minMaxBitsCmd = new MinMaxBitsCommand(); minMaxBitsCmd.run(image); var minMaxValuesCmd = new MinMaxValuesCommand(); minMaxValuesCmd.run(image); var lowBit = minMaxBitsCmd.minimumBit; var highBit = minMaxBitsCmd.maximumBit; var size = (1 << (image.highBit - image.lowBit + 1)); var palette = new Array(size); // fill the first half of the LUT with RED for (var x = 0; x < size / 2; x++) { var color = []; color.a = 255; color.r = RasterColor16Helper.maximumComponent; color.g = 0; color.b = 0; color.reserved = 0; palette[x] = color; } var minVal = minMaxValuesCmd.minimumValue; var maxVal = minMaxValuesCmd.maximumValue; // Fill the rest with gray values for (var x = (size / 2) ; x < size; x++) { var color = []; color.a = 255; color.r = Math.floor(Math.max(0, (Math.min(RasterColor16Helper.maximumComponent, Tools.ToUInt32(x - minVal) * RasterColor16Helper.maximumComponent / (maxVal - minVal))))); color.g = color.r; color.b = color.r; color.reserved = 0; palette[x] = color; } mage.windowLevelExt(lowBit, highBit, palette, RasterWindowLevelMode.paintAndProcessing); return Tools.AppLocalFolder().createFileAsync("IMAGE1_WindowLevel.bmp") }) .then(function (saveFile) { var saveStream = LeadStreamFactory.create(saveFile); return codecs.saveAsync(image, saveStream, RasterImageFormat.bmp, 0) }) .then(function () { image.close(); codecs.close(); }); } } } }
using Leadtools; using Leadtools.Codecs; using Leadtools.ImageProcessing; using Leadtools.ImageProcessing.Core; using Leadtools.ImageProcessing.Color; using Leadtools.Dicom; public async Task WindowLevelExtExample() { RasterCodecs codecs = new RasterCodecs(); // Load a 16-bit grayscale image string srcFileName = @"Assets\IMAGE2.DCM"; StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName); RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)); // 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 = RasterColor16Helper.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(RasterColor16Helper.MaximumComponent, (Convert.ToUInt32(x - minVal) * RasterColor16Helper.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); StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync("IMAGE1_WindowLevel.bmp"); ILeadStream saveStream = LeadStreamFactory.Create(saveFile); await codecs.SaveAsync(image, saveStream, RasterImageFormat.Bmp, 0); image.Dispose(); codecs.Dispose(); }
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 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(); }
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 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