Leadtools Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
SetLookupTable Method
See Also  Example
Leadtools Namespace > RasterImage Class : SetLookupTable Method



value
An array of RasterColor structures which represent the lookup table (LUT) of this RasterImage.
Sets the 8-bit lookup table (LUT) of this RasterImage.

Syntax

Visual Basic (Declaration)  
Public Sub SetLookupTable( _
   ByVal value() As RasterColor _
) 
Visual Basic (Usage) Copy Code
Dim instance As RasterImage
Dim value() As RasterColor
 
instance.SetLookupTable(value)
C#  
public void SetLookupTable( 
   RasterColor[] value
)
C++/CLI  
public:
void SetLookupTable( 
   array<RasterColor>^ value
) 

Parameters

value
An array of RasterColor structures which represent the lookup table (LUT) of this RasterImage.

Example

Visual Basic Copy Code
Private Sub SetLookupTable()
   RasterSupport.Unlock(RasterSupportType.Medical, "Use a valid key here")
   DicomEngine.Startup()
   RasterCodecs.Startup()

   ' Get the path of the LEADTOOLS images directory
   Dim strImagesDirectory As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "//LEADTOOLS Images//"

   ' Create a RasterCodecs class for saving out images
   Dim codecs As RasterCodecs = New RasterCodecs()

   ' Load a dataset
   Dim ds As DicomDataSet = New DicomDataSet()
   ds.Load(strImagesDirectory & "IMAGE3.dcm", DicomDataSetLoadFlags.None)

   ' Get the image but do NOT auto-apply any of the LUTs
   Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PixelData, True)
   Dim image As RasterImage = ds.GetImage(element, 0, 16, RasterByteOrder.Gray, DicomGetImageFlags.None)
   image.UseLookupTable = True

   ' Save out the image without any LUTs applied. It should be black
   codecs.Save(image, strImagesDirectory & "BeforeSetLookupTable.bmp", RasterImageFormat.Bmp, 8)

   ' Create a LUT
   Dim lut As RasterColor() = New RasterColor(CInt(Math.Pow(2, 16)) - 1) {}

   ' Get the Minimum and Maximum values so we can calculate appropriate LUT values.
   Dim cmdMinMax As MinMaxValuesCommand = New MinMaxValuesCommand()
   cmdMinMax.Run(image)
   Dim maxVal As Integer = cmdMinMax.MaximumValue
   Dim minVal As Integer = cmdMinMax.MinimumValue

   Dim i As Integer = 0
   Do While i < lut.Length
      lut(i).R = Convert.ToByte(Math.Min(255, ((i - minVal) * 255 / (maxVal - minVal))))
      lut(i).G = lut(i).R
      lut(i).B = lut(i).R
      i += 1
   Loop

   ' Set the new lookup table
   image.SetLookupTable(lut)

   ' Save out the image with the LUT applied. It should look normal
   codecs.Save(image, strImagesDirectory & "AfterSetLookupTable.bmp", RasterImageFormat.Bmp, 8)

   DicomEngine.Shutdown()
End Sub
C# Copy Code
public void SetLookupTable() 

    RasterSupport.Unlock(RasterSupportType.Medical, "Use a valid key here"); 
    DicomEngine.Startup(); 
    RasterCodecs.Startup(); 
 
    // Get the path of the LEADTOOLS images directory 
    string strImagesDirectory = LeadtoolsExamples.Common.ImagesPath.Path;  
 
    // Create a RasterCodecs class for saving out images 
    RasterCodecs codecs = new RasterCodecs(); 
 
    // Load a dataset 
    DicomDataSet ds = new DicomDataSet(); 
    ds.Load(strImagesDirectory + "IMAGE3.dcm", DicomDataSetLoadFlags.None); 
 
    // Get the image but do NOT auto-apply any of the LUTs 
    DicomElement element = ds.FindFirstElement(null, DicomTag.PixelData, true); 
    RasterImage image = ds.GetImage(element, 0, 16, RasterByteOrder.Gray, DicomGetImageFlags.None); 
    image.UseLookupTable = true; 
 
    // Save out the image without any LUTs applied.  It should be black 
    codecs.Save(image, strImagesDirectory + "BeforeSetLookupTable.bmp", RasterImageFormat.Bmp, 8); 
 
    // Create a LUT 
    RasterColor[] lut = new RasterColor[(int)Math.Pow(2, 16)]; 
 
    // Get the Minimum and Maximum values so we can calculate appropriate LUT values. 
    MinMaxValuesCommand cmdMinMax = new MinMaxValuesCommand(); 
    cmdMinMax.Run(image); 
    int maxVal = cmdMinMax.MaximumValue; 
    int minVal = cmdMinMax.MinimumValue; 
 
    for (int i = 0; i < lut.Length; i++) 
    { 
        lut[i].R = Convert.ToByte(Math.Min(255, ((i - minVal) * 255 / (maxVal - minVal)))); 
        lut[i].G = lut[i].R; 
        lut[i].B = lut[i].R; 
    } 
 
    // Set the new lookup table 
    image.SetLookupTable(lut); 
 
    // Save out the image with the LUT applied.  It should look normal 
    codecs.Save(image, strImagesDirectory + "AfterSetLookupTable.bmp", RasterImageFormat.Bmp, 8); 
 
    DicomEngine.Shutdown(); 
}

Remarks

The lookup table (LUT) is used when the value of UseLookupTable is set to true.

The 8-bit and 16-bit lookup tables are synchronized, so when you change one, the other is changed as well The 16-bit lookup table (RasterImage.SetLookupTable16) has more precision so it is recommended you use the 16-bit LUT instead of the 8-bit LUT.

For more information, refer to Grayscale Images.

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also