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



value
An array of RasterColor structures which represent the lookup table (LUT) of this RasterImage.
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. Supported in Silverlight, Windows Phone 7

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 BasicCopy Code
Private Sub SetLookupTable()
   RasterSupport.Unlock(RasterSupportType.Medical, "Use a valid key here")
   DicomEngine.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();

      // Create a RasterCodecs class for saving out images
      RasterCodecs codecs = new RasterCodecs();

      // Load a dataset
      DicomDataSet ds = new DicomDataSet();
      ds.Load(Path.Combine(LEAD_VARS.ImagesDir, "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, Path.Combine(LEAD_VARS.ImagesDir, "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, Path.Combine(LEAD_VARS.ImagesDir, "AfterSetLookupTable.bmp"), RasterImageFormat.Bmp, 8);

      DicomEngine.Shutdown();
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
public void SetLookupTable(Stream dataSetStream, Stream destStream1, Stream destStream2)
{
   RasterSupport.Unlock(RasterSupportType.Medical, "Use a valid key here");
   // Create a RasterCodecs class for saving out images
   RasterCodecs codecs = new RasterCodecs();

   // Load a dataset
   DicomDataSet ds = new DicomDataSet();
   ds.Load(dataSetStream, 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, destStream1, 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, destStream2, RasterImageFormat.Bmp, 8);

   DicomEngine.Shutdown();
}
SilverlightVBCopy Code
Public Sub SetLookupTable(ByVal dataSetStream As Stream, ByVal destStream1 As Stream, ByVal destStream2 As Stream)
   RasterSupport.Unlock(RasterSupportType.Medical, "Use a valid key here")
   ' 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(dataSetStream, 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, destStream1, 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, destStream2, RasterImageFormat.Bmp, 8)

   DicomEngine.Shutdown()
End Sub

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: 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