Leadtools Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
RasterUserMatchTable Class
See Also  Members   Example 
Leadtools.ImageProcessing Namespace : RasterUserMatchTable Class



Maintains a predefined table to speed conversion with a user palette when using ColorResolutionCommand.

Syntax

Visual Basic (Declaration)  
Public Class RasterUserMatchTable 
Visual Basic (Usage) Copy Code
Dim instance As RasterUserMatchTable
C#  
public class RasterUserMatchTable 
C++/CLI  
public ref class RasterUserMatchTable 

Example

This example changes the color resolution of a bitmap, using a user-defined palette and a match table for fast color matching.

Visual Basic Copy Code
Public Sub RasterUserMatchTableExample()
 RasterCodecs.Startup()
 Dim codecs As RasterCodecs = New RasterCodecs()

 Dim srcFileName As String = LeadtoolsExamples.Common.ImagesPath.Path + "Image1.cmp"
 Dim destFileName As String = LeadtoolsExamples.Common.ImagesPath.Path + "RasterUserMatchTable.bmp"

 ' Load the image from disk
 Dim image As RasterImage = codecs.Load(srcFileName)

 ' 64-color rainbow palette
 Dim colors As RasterColor() = {New RasterColor(0, 0, 0), New RasterColor(0, 0, 85), New RasterColor(0, 0, 170), New RasterColor(0, 0, 255), New RasterColor(85, 0, 0), New RasterColor(85, 0, 85), New RasterColor(85, 0, 170), New RasterColor(85, 0, 255), New RasterColor(170, 0, 0), New RasterColor(170, 0, 85), New RasterColor(170, 0, 170), New RasterColor(170, 0, 255), New RasterColor(255, 0, 0), New RasterColor(255, 0, 85), New RasterColor(255, 0, 170), New RasterColor(255, 0, 255), New RasterColor(0, 85, 0), New RasterColor(0, 85, 85), New RasterColor(0, 85, 170), New RasterColor(0, 85, 255), New RasterColor(85, 85, 0), New RasterColor(85, 85, 85), New RasterColor(85, 85, 170), New RasterColor(85, 85, 255), New RasterColor(170, 85, 0), New RasterColor(170, 85, 85), New RasterColor(170, 85, 170), New RasterColor(170, 85, 255), New RasterColor(255, 85, 0), New RasterColor(255, 85, 85), New RasterColor(255, 85, 170), New RasterColor(255, 85, 255), New RasterColor(0, 170, 0), New RasterColor(0, 170, 85), New RasterColor(0, 170, 170), New RasterColor(0, 170, 255), New RasterColor(85, 170, 0), New RasterColor(85, 170, 85), New RasterColor(85, 170, 170), New RasterColor(85, 170, 255), New RasterColor(170, 170, 0), New RasterColor(170, 170, 85), New RasterColor(170, 170, 170), New RasterColor(170, 170, 255), New RasterColor(255, 170, 0), New RasterColor(255, 170, 85), New RasterColor(255, 170, 170), New RasterColor(255, 170, 255), New RasterColor(0, 255, 0), New RasterColor(0, 255, 85), New RasterColor(0, 255, 170), New RasterColor(0, 255, 255), New RasterColor(85, 255, 0), New RasterColor(85, 255, 85), New RasterColor(85, 255, 170), New RasterColor(85, 255, 255), New RasterColor(170, 255, 0), New RasterColor(170, 255, 85), New RasterColor(170, 255, 170), New RasterColor(170, 255, 255), New RasterColor(255, 255, 0), New RasterColor(255, 255, 85), New RasterColor(255, 255, 170), New RasterColor(255, 255, 255)}

 ' Create and set the user match table
 Dim userMatchTable As RasterUserMatchTable = New RasterUserMatchTable()
 userMatchTable.Create(colors)
 userMatchTable.Use()

 ' Change the color resolution using the new palette. Note that the user match table
 ' is makes your code faster only if you use it more than once. It is included here only
 ' to show how it can be coded.

 Dim command As ColorResolutionCommand = New ColorResolutionCommand(ColorResolutionCommandMode.InPlace, 8, RasterByteOrder.Rgb, RasterDitheringMethod.FloydStein, ColorResolutionCommandPaletteFlags.UsePalette Or ColorResolutionCommandPaletteFlags.FastMatch, colors)
 command.Run(image)

 ' Free the user match table when it is no longer needed
 userMatchTable.Unuse()

 ' Save the image back to disk
 codecs.Save(image, destFileName, RasterImageFormat.Bmp, 8)

 ' Clean up
 image.Dispose()
 RasterCodecs.Shutdown()
      End Sub
C# Copy Code
public void RasterUserMatchTableExample() 

   RasterCodecs.Startup(); 
   RasterCodecs codecs = new RasterCodecs(); 
 
   string srcFileName = LeadtoolsExamples.Common.ImagesPath.Path + "Image1.cmp"; 
   string destFileName = LeadtoolsExamples.Common.ImagesPath.Path + "RasterUserMatchTable.bmp"; 
 
   // Load the image from disk 
   RasterImage image = codecs.Load(srcFileName); 
 
   // 64-color rainbow palette 
   RasterColor[] colors =  
   { 
      new RasterColor(0, 0, 0), new RasterColor(0, 0, 85), new RasterColor(0, 0, 170), new RasterColor(0, 0, 255), 
      new RasterColor(85, 0, 0), new RasterColor(85, 0, 85), new RasterColor(85, 0, 170), new RasterColor(85, 0, 255), 
      new RasterColor(170, 0, 0), new RasterColor(170, 0, 85), new RasterColor(170, 0, 170), new RasterColor(170, 0, 255), 
      new RasterColor(255, 0, 0), new RasterColor(255, 0, 85), new RasterColor(255, 0, 170), new RasterColor(255, 0, 255), 
      new RasterColor(0, 85, 0), new RasterColor(0, 85, 85), new RasterColor(0, 85, 170), new RasterColor(0, 85, 255), 
      new RasterColor(85, 85, 0), new RasterColor(85, 85, 85), new RasterColor(85, 85, 170), new RasterColor(85, 85, 255), 
      new RasterColor(170, 85, 0), new RasterColor(170, 85, 85), new RasterColor(170, 85, 170), new RasterColor(170, 85, 255), 
      new RasterColor(255, 85, 0), new RasterColor(255, 85, 85), new RasterColor(255, 85, 170), new RasterColor(255, 85, 255), 
      new RasterColor(0, 170, 0), new RasterColor(0, 170, 85), new RasterColor(0, 170, 170), new RasterColor(0, 170, 255), 
      new RasterColor(85, 170, 0), new RasterColor(85, 170, 85), new RasterColor(85, 170, 170), new RasterColor(85, 170, 255), 
      new RasterColor(170, 170, 0), new RasterColor(170, 170, 85), new RasterColor(170, 170, 170), new RasterColor(170, 170, 255), 
      new RasterColor(255, 170, 0), new RasterColor(255, 170, 85), new RasterColor(255, 170, 170), new RasterColor(255, 170, 255), 
      new RasterColor(0, 255, 0), new RasterColor(0, 255, 85), new RasterColor(0, 255, 170), new RasterColor(0, 255, 255), 
      new RasterColor(85, 255, 0), new RasterColor(85, 255, 85), new RasterColor(85, 255, 170), new RasterColor(85, 255, 255), 
      new RasterColor(170, 255, 0), new RasterColor(170, 255, 85), new RasterColor(170, 255, 170), new RasterColor(170, 255, 255), 
      new RasterColor(255, 255, 0), new RasterColor(255, 255, 85), new RasterColor(255, 255, 170), new RasterColor(255, 255, 255) 
   }; 
 
   // Create and set the user match table 
   RasterUserMatchTable userMatchTable = new RasterUserMatchTable(); 
   userMatchTable.Create(colors); 
   userMatchTable.Use(); 
 
   // Change the color resolution using the new palette. Note that the user match table 
   // is makes your code faster only if you use it more than once. It is included here only  
   // to show how it can be coded. 
 
   ColorResolutionCommand command = new ColorResolutionCommand( 
      ColorResolutionCommandMode.InPlace, 
      8, 
      RasterByteOrder.Rgb, 
      RasterDitheringMethod.FloydStein, 
      ColorResolutionCommandPaletteFlags.UsePalette | ColorResolutionCommandPaletteFlags.FastMatch, 
      colors); 
   command.Run(image); 
 
   // Free the user match table when it is no longer needed 
   userMatchTable.Unuse(); 
 
   // Save the image back to disk 
   codecs.Save(image, destFileName, RasterImageFormat.Bmp, 8); 
 
   // Clean up 
   image.Dispose(); 
   RasterCodecs.Shutdown(); 
}

Remarks

Use the RasterUserMatchTable class to create a predefined table to speed conversion with a user palette when using ColorResolutionCommand.

You should use the following sequense

  1. Create a new instance of the RasterUserMatchTable class
  2. Call the RasterUserMatchTable.Create method to create the table.
  3. Call the RasterUserMatchTable.Use method to make this the current table. (Having this as a separate method allows you to save tables in files and get the one you need, without creating it again.)
  4. Run ColorResolutionCommand with ColorResolutionCommandPaletteFlags.UsePalette or ColorResolutionCommandPaletteFlags.FastMatch set in the ColorResolutionCommand.PaletteFlags property.
  5. Call the Unuse method when the table is no longer needed.

The completed table is a 32K array of integers. On a 32-bit system, it occupies 128K bytes of memory. Creation of the table is a slow, memory-intensive process that is useful only if you are using your own palette more than once. For example, you may want to create the table once, save it to a file, and ship that file with your application.

Inheritance Hierarchy

System.Object
   Leadtools.ImageProcessing.RasterUserMatchTable

Requirements

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

See Also