RemapHue example for Delphi

{ 
This example considers that the image you are working with is 24 bpp. 
This example changes all green hues(and hues near green) to the hue of crNewColor
}
Function Increment(x: L_UINT): L_UINT; 
begin
   Result:= (x + 1) Mod 256; 
End; 

Function Decrement(x: L_UINT): L_UINT; 
begin
   Result:= (x + 255) Mod 256; 
End; 

Function Add(x: L_UINT; y: L_UINT): L_UINT; 
begin
   Result:= (x + y) Mod 256; 
End; 

procedure TForm1.Button1Click(Sender: TObject); 
var
   i: L_INT; 
   nHueGreen: L_INT; 
   nHueNewColor: L_INT; 
   nHueChange: L_INT; 
   crNewColor: COLORREF; 
   uCount: L_UINT; 

begin
   LEADImage1.RemapHueTablesSize:= 256; 

   for i:= 0 To 255 do
   begin
      LEADImage1.MaskTable[i]:= 0; 
      LEADImage1.HTable[i]:= i; 
   end; 

   //Get the hue for green
   nHueGreen:= LEADImage1.HSV_HfromRGB(RGB(0, 255, 0)); 

   //Obtain new hue (crNewColor can be any color) 
   crNewColor:= RGB(255, 255, 0); 
   nHueNewColor:= LEADImage1.HSV_HfromRGB(crNewColor); 
   nHueChange:= nHueNewColor - nHueGreen; 

   if (nHueChange < 0) then
    nHueChange:= nHueChange + 256; 

   //Set values in HTable, MaskTable
   LEADImage1.HTable[nHueGreen]:= LEADImage1.HTable[nHueGreen] + L_UINT(nHueChange); 
   LEADImage1.MaskTable[nHueGreen]:= 1; 

   //set the hues near green (+/- 5) 
   uCount:= 0; 
   i:= Increment(nHueGreen); 
   while uCount < 5 do
   begin
      LEADImage1.HTable[i]:= Add(LEADImage1.HTable[i], nHueChange); 
      LEADImage1.MaskTable[i]:= 1; 
      i:= Increment(i); 
      uCount:= uCount + 1; 
   end; 

   uCount:= 0; 
   i:= Decrement(nHueGreen); 
   while uCount < 5 do
   begin
      LEADImage1.HTable[i]:= Add(Integer(LEADImage1.HTable[i]), nHueChange); 
      LEADImage1.MaskTable[i]:= 1; 
      i:= Decrement(i); 
      uCount:= uCount + 1; 
   end; 

   LEADImage1.RemapHue( True, True, False, False ) ; 
end;