public class RemapHueCommand : Leadtools.ImageProcessing.RasterCommand, Leadtools.ImageProcessing.IRasterCommand
'Declaration Public Class RemapHueCommand Inherits Leadtools.ImageProcessing.RasterCommand Implements Leadtools.ImageProcessing.IRasterCommand
'Usage Dim instance As RemapHueCommand
public sealed class RemapHueCommand : Leadtools.ImageProcessing.IRasterCommand
function Leadtools.ImageProcessing.Color.RemapHueCommand()
public ref class RemapHueCommand : public Leadtools.ImageProcessing.RasterCommand, Leadtools.ImageProcessing.IRasterCommand
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
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"; }
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); } [TestMethod] 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); }
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(); }
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
Target Platforms: Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
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