LEADTOOLS Image Processing (Leadtools.ImageProcessing.Color assembly)

RemapHueCommand Class

Show in webframe
Example 







Members 
Uses a lookup table to change an image's hue values. The saturation and value tables change S and V values only if a particular hue value is marked as non-zero in the Mask property. It is used for all resolutions, including 48 and 64-bit images.
Object Model
Syntax
'Declaration
 
Public Class RemapHueCommand 
   Inherits Leadtools.ImageProcessing.RasterCommand
   Implements Leadtools.ImageProcessing.IRasterCommand 
'Usage
 
Dim instance As RemapHueCommand
public sealed class RemapHueCommand : Leadtools.ImageProcessing.IRasterCommand  
@interface LTRemapHueCommand : LTRasterCommand
public class RemapHueCommand extends RasterCommand
function Leadtools.ImageProcessing.Color.RemapHueCommand()
Remarks
For more information, refer to Changing Brightness and Contrast.
Example
Copy Code  
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing.Color

Public Function INCREMENT_S1(ByVal x As Integer, ByVal Length As Integer) As Integer
   Return ((x + 1) Mod Length)
End Function
Public Function DECREMENT_S1(ByVal x As Integer, ByVal Length As Integer) As Integer
   Return ((x + (Length - 1)) Mod Length)
End Function

Public Function ADD_S1(ByVal x As Integer, ByVal y As Integer, ByVal Length As Integer) As Integer
   Return ((x + y) Mod Length)
End Function


Public Sub RemapHueCommandCommandExample()
   Dim codecs As New RasterCodecs()
   codecs.ThrowExceptionsOnInvalidImages = True

   Dim leadImage As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Master.jpg"))

   ' Prepare the command
   Dim MaskTable() As Integer
   Dim HueTable() As Integer
   Dim hsvRef As RasterHsvColor
   Dim HueGreen As Integer
   Dim HueChange As Integer

   Dim Change As Integer
   Dim i As Integer
   Dim Count As Integer
   Dim Length As Integer

   If (leadImage.BitsPerPixel >= 48) Then

      Length = 65536

   ElseIf (Not (leadImage.BitsPerPixel = 16 Or leadImage.BitsPerPixel = 12)) Then
      Length = 256
   ElseIf (IsNothing(leadImage.GetLookupTable) And leadImage.UseLookupTable) Then
      Length = 256
   Else
      Length = (1 << leadImage.BitsPerPixel)
   End If
   'Allocate tables
   ReDim MaskTable(Length - 1)
   ReDim HueTable(Length - 1)

   'Initialize tables
   For i = 0 To Length - 1
      MaskTable(i) = 0
      HueTable(i) = i
   Next

   'Get the hue for green
   hsvRef = RasterHsvColor.FromRasterColor(New RasterColor(0, 255, 0))

   HueGreen = hsvRef.H

   'Obtain new hue  
   hsvRef = RasterHsvColor.FromRasterColor(New RasterColor(255, 128, 0))
   Change = hsvRef.H - HueGreen
   If (Change > 0) Then
      HueChange = Change
   Else
      HueChange = Change + Length - 1
   End If

   HueGreen = (HueGreen * (Length - 1)) \ 255
   HueChange = (HueChange * (Length - 1)) \ 255

   'Set values in HueTable, MaskTable 
   HueTable(HueGreen) = HueTable(HueGreen) + HueChange
   MaskTable(HueGreen) = 1

   'set the hues near green (+/- 15)
   i = INCREMENT_S1(HueGreen, Length)

   For Count = (15 * (Length - 1)) \ 255 To 1 Step -1
      i = INCREMENT_S1(i, Length)
      HueTable(i) = ADD_S1(HueTable(i), HueChange, Length)
      MaskTable(i) = 1
   Next

   i = DECREMENT_S1(HueGreen, Length)

   For Count = (15 * (Length - 1)) \ 255 To 1 Step -1

      i = DECREMENT_S1(i, Length)
      HueTable(i) = ADD_S1(HueTable(i), HueChange, Length)
      MaskTable(i) = 1
   Next
   Dim command As RemapHueCommand = New RemapHueCommand(MaskTable, HueTable, Nothing, Nothing, Length)

   command.Run(leadImage)
   codecs.Save(leadImage, Path.Combine(LEAD_VARS.ImagesDir, "Result.jpg"), RasterImageFormat.Jpeg, 24)

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.Color;

public int INCREMENT_S1(int x, int Length)
{
   return ((x + 1) % Length);
}
public int DECREMENT_S1(int x, int Length)
{
   return ((x + (Length - 1)) % Length);
}

public int ADD_S1(int x, int y, int Length)
{
   return ((x + y) % Length);
}


public void RemapHueCommandCommandExample()
{
   // Load an image
   RasterCodecs codecs = new RasterCodecs();
   codecs.ThrowExceptionsOnInvalidImages = true;

   RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "Master.jpg"));

   // Prepare the command
   int[]  MaskTable;
   int[]  HueTable;
   RasterHsvColor hsvRef;
   int    HueGreen, HueChange;
   int    Change;
   int    i, Count;
   int    Length;

   if(image.BitsPerPixel >= 48)
      Length = 0x10000;
   else if(!(image.BitsPerPixel == 16 || image.BitsPerPixel == 12))
      Length = 256;
   else if(image.GetLookupTable() != null && image.UseLookupTable)
      Length = 256;
   else
      Length = (1 << image.BitsPerPixel);

   //Allocate tables
   MaskTable = new int[Length];
   HueTable  = new int[Length];

   //Initialize tables
   for (i = 0; i < Length; i++)
   {
      MaskTable[i] = 0;
      HueTable[i] = i;
   }

   //Get the hue for green
   hsvRef = RasterHsvColor.FromRasterColor(new RasterColor(0,255,0));

   HueGreen = hsvRef.H;

   //Obtain new hue  
   hsvRef =  RasterHsvColor.FromRasterColor(new RasterColor(255, 128, 0));
   Change = (int)hsvRef.H - (int)HueGreen;
   HueChange = (Change>0) ? (int)Change : (int)(Change + Length - 1);
   HueGreen   *= (Length - 1)/255;
   HueChange *= (Length - 1)/255;

   //Set values in HueTable, MaskTable 
   HueTable[HueGreen] = (HueTable[HueGreen] + HueChange);
   MaskTable[HueGreen] = 1;

   //set the hues near green (+/- 15)
   Count = (15 * (Length - 1))/255;
   for (i = INCREMENT_S1(HueGreen, Length); Count > 0; i = INCREMENT_S1(i, Length), Count--)
   {
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length);
      MaskTable[i] = 1;
   }

   Count = (15 * (Length - 1))/255;
   for (i = DECREMENT_S1(HueGreen, Length); Count > 0; i = DECREMENT_S1(i, Length), Count--)
   {
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length);
      MaskTable[i] = 1;
   }

   RemapHueCommand command = new RemapHueCommand(MaskTable, HueTable, null, null, Length);
   command.Run(image);
   codecs.Save(image, Path.Combine(LEAD_VARS.ImagesDir, "Result.jpg"), RasterImageFormat.Jpeg, 24);

}

static class LEAD_VARS
{
public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing.Color;

public int INCREMENT_S1(int x, int Length)
{
   return ((x + 1) % Length);
}
public int DECREMENT_S1(int x, int Length)
{
   return ((x + (Length - 1)) % Length);
}

public int ADD_S1(int x, int y, int Length)
{
   return ((x + y) % Length);
}

      
public async Task RemapHueCommandCommandExample()
{
   // Load an image
   RasterCodecs codecs = new RasterCodecs();
   codecs.ThrowExceptionsOnInvalidImages = true;

   // Load the image
   string srcFileName = @"Assets\Image1.cmp";
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName);
   RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile));

   // Prepare the command
   int[]  MaskTable;
   int[]  HueTable;
   RasterHsvColor hsvRef;
   int    HueGreen, HueChange;
   int    Change;
   int    i, Count;
   int    Length;

   if(image.BitsPerPixel >= 48)
      Length = 0x10000;
   else if(!(image.BitsPerPixel == 16 || image.BitsPerPixel == 12))
      Length = 256;
   else if(image.GetLookupTable() != null && image.UseLookupTable)
      Length = 256;
   else
      Length = (1 << image.BitsPerPixel);

   //Allocate tables
   MaskTable = new int[Length];
   HueTable  = new int[Length];

   //Initialize tables
   for (i = 0; i < Length; i++)
   {
      MaskTable[i] = 0;
      HueTable[i] = i;
   }

   //Get the hue for green
   hsvRef = RasterHsvColorHelper.FromRasterColor(RasterColorHelper.Create(0,255,0));

   HueGreen = hsvRef.H;

   //Obtain new hue  
   hsvRef =  RasterHsvColorHelper.FromRasterColor(RasterColorHelper.Create(255, 128, 0));
   Change = (int)hsvRef.H - (int)HueGreen;
   HueChange = (Change>0) ? (int)Change : (int)(Change + Length - 1);
   HueGreen   *= (Length - 1)/255;
   HueChange *= (Length - 1)/255;

   //Set values in HueTable, MaskTable 
   HueTable[HueGreen] = (HueTable[HueGreen] + HueChange);
   MaskTable[HueGreen] = 1;

   //set the hues near green (+/- 15)
   Count = (15 * (Length - 1))/255;
   for (i = INCREMENT_S1(HueGreen, Length); Count > 0; i = INCREMENT_S1(i, Length), Count--)
   {
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length);
      MaskTable[i] = 1;
   }

   Count = (15 * (Length - 1))/255;
   for (i = DECREMENT_S1(HueGreen, Length); Count > 0; i = DECREMENT_S1(i, Length), Count--)
   {
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length);
      MaskTable[i] = 1;
   }

   RemapHueCommand command = new RemapHueCommand(MaskTable, HueTable, null, null, Length);
   command.Run(image);

   string destFileName = @"result.jpg";
   StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(destFileName);
   await codecs.SaveAsync(image, LeadStreamFactory.Create(saveFile), RasterImageFormat.Jpeg, 0);
}
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing.Color;
using Leadtools.Examples;

public int INCREMENT_S1(int x, int Length)
{
   return ((x + 1) % Length);
}
public int DECREMENT_S1(int x, int Length)
{
   return ((x + (Length - 1)) % Length);
}

public int ADD_S1(int x, int y, int Length)
{
   return ((x + y) % Length);
}

public void RemapHueCommandCommandExample(RasterImage image, Stream outStream)
{
   // Prepare the command
   int[]  MaskTable;
   int[]  HueTable;
   RasterHsvColor hsvRef;
   int    HueGreen, HueChange;
   int    Change;
   int    i, Count;
   int    Length;

   if(image.BitsPerPixel >= 48)
      Length = 0x10000;
   else if(!(image.BitsPerPixel == 16 || image.BitsPerPixel == 12))
      Length = 256;
   else if(image.GetLookupTable() != null && image.UseLookupTable)
      Length = 256;
   else
      Length = (1 << image.BitsPerPixel);

   //Allocate tables
   MaskTable = new int[Length];
   HueTable  = new int[Length];

   //Initialize tables
   for (i = 0; i < Length; i++)
   {
      MaskTable[i] = 0;
      HueTable[i] = i;
   }

   //Get the hue for green
   hsvRef = RasterHsvColor.FromRasterColor(new RasterColor(0,255,0));

   HueGreen = hsvRef.H;

   //Obtain new hue  
   hsvRef =  RasterHsvColor.FromRasterColor(new RasterColor(255, 128, 0));
   Change = hsvRef.H - HueGreen;
   HueChange = (Change>0) ? Change : (Change + Length - 1);
   HueGreen   *= (Length - 1)/255;
   HueChange *= (Length - 1)/255;

   //Set values in HueTable, MaskTable 
   HueTable[HueGreen] = (HueTable[HueGreen] + HueChange);
   MaskTable[HueGreen] = 1;

   //set the hues near green (+/- 15)
   Count = (15 * (Length - 1))/255;
   for (i = INCREMENT_S1(HueGreen, Length); Count > 0; i = INCREMENT_S1(i, Length), Count--)
   {
      HueTable[i] = ADD_S1((int)HueTable[i], HueChange, Length);
      MaskTable[i] = 1;
   }

   Count = (15 * (Length - 1))/255;
   for (i = DECREMENT_S1(HueGreen, Length); Count > 0; i = DECREMENT_S1(i, Length), Count--)
   {
      HueTable[i] = ADD_S1(HueTable[i], HueChange, Length);
      MaskTable[i] = 1;
   }

   RemapHueCommand command = new RemapHueCommand(MaskTable, HueTable, null, null, Length);
   command.Run(image);

   // Save result image
   RasterCodecs codecs = new RasterCodecs();
   codecs.Save(image, outStream, RasterImageFormat.Jpeg, 24);
   image.Dispose();
}
Imports Leadtools
Imports Leadtools.Codecs
Imports Leadtools.ImageProcessing.Color

Public Function INCREMENT_S1(ByVal x As Integer, ByVal Length As Integer) As Integer
   Return ((x + 1) Mod Length)
End Function
Public Function DECREMENT_S1(ByVal x As Integer, ByVal Length As Integer) As Integer
   Return ((x + (Length - 1)) Mod Length)
End Function

Public Function ADD_S1(ByVal x As Integer, ByVal y As Integer, ByVal Length As Integer) As Integer
   Return ((x + y) Mod Length)
End Function

Public Sub RemapHueCommandCommandExample(ByVal image As RasterImage, ByVal outStream As Stream)
   ' Prepare the command
   Dim MaskTable As Integer()
   Dim HueTable As Integer()
   Dim hsvRef As RasterHsvColor
   Dim HueGreen, HueChange As Integer
   Dim Change As Integer
   Dim i, Count As Integer
   Dim Length As Integer

   If image.BitsPerPixel >= 48 Then
      Length = &H10000
   Else If Not(image.BitsPerPixel = 16 OrElse image.BitsPerPixel = 12) Then
      Length = 256
   Else If Not image.GetLookupTable() Is Nothing AndAlso image.UseLookupTable Then
      Length = 256
   Else
      Length = (1 << image.BitsPerPixel)
   End If

   'Allocate tables
   MaskTable = New Integer(Length - 1){}
   HueTable = New Integer(Length - 1){}

   'Initialize tables
   i = 0
   Do While i < Length
      MaskTable(i) = 0
      HueTable(i) = i
      i += 1
   Loop

   'Get the hue for green
   hsvRef = RasterHsvColor.FromRasterColor(New RasterColor(0,255,0))

   HueGreen = hsvRef.H

   'Obtain new hue  
   hsvRef = RasterHsvColor.FromRasterColor(New RasterColor(255, 128, 0))
   Change = hsvRef.H - HueGreen
   If (Change>0) Then
      HueChange = Change
   Else
      HueChange = (Change + Length - 1)
   End If
   HueGreen *= (Length - 1)/255
   HueChange *= (Length - 1)/255

   'Set values in HueTable, MaskTable 
   HueTable(HueGreen) = (HueTable(HueGreen) + HueChange)
   MaskTable(HueGreen) = 1

   'set the hues near green (+/- 15)
   Count = (15 * (Length - 1))/255
   i = INCREMENT_S1(HueGreen, Length)
   Do While Count > 0
      HueTable(i) = ADD_S1(CInt(HueTable(i)), HueChange, Length)
      MaskTable(i) = 1
      i = INCREMENT_S1(i, Length)
      Count -= 1
   Loop

   Count = (15 * (Length - 1))/255
   i = DECREMENT_S1(HueGreen, Length)
   Do While Count > 0
      HueTable(i) = ADD_S1(HueTable(i), HueChange, Length)
      MaskTable(i) = 1
      i = DECREMENT_S1(i, Length)
      Count -= 1
   Loop

   Dim command As RemapHueCommand = New RemapHueCommand(MaskTable, HueTable, Nothing, Nothing, Length)
   command.Run(image)

   ' Save result image
   Dim codecs As RasterCodecs = New RasterCodecs()
   codecs.Save(image, outStream, RasterImageFormat.Jpeg, 24)
   image.Dispose()
End Sub
Requirements

Target Platforms

See Also

Reference

RemapHueCommand Members
Leadtools.ImageProcessing.Color Namespace
Changing Brightness and Contrast
ChangeIntensityCommand Class
GammaCorrectCommand Class
ChangeContrastCommand Class
HistogramContrastCommand Class
StretchIntensityCommand Class
InvertCommand Class
ChangeHueCommand Class
ChangeSaturationCommand Class
HistogramEqualizeCommand Class
Leadtools.ImageProcessing.FillCommand
HistogramCommand Class
Leadtools.ImageProcessing.Core.WindowLevelCommand

 

 


Products | Support | Contact Us | Copyright Notices
© 2006-2014 All Rights Reserved. LEAD Technologies, Inc.