RemapHueCommand Class (original) (raw)

Summary

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.

Syntax

C#

Objective-C

C++/CLI

Java

Python

@interface LTRemapHueCommand : LTRasterCommand 

public class RemapHueCommand extends RasterCommand

class RemapHueCommand(RasterCommand): 

Example

Run the RemapHueCommand on an image and change all green hues (and hues near green).

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, "cannon.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:\LEADTOOLS22\Resources\Images"; }