LEADTOOLS画像処理(Leadtools.ImageProcessing.Colorアセンブリ)

フレームを表示

RemapHueCommandクラス








メンバ 
imageの色相値を変更するために、ルックアップテーブルを使います。特定の色相値がマスクプロパティの非ゼロとしてマークされる場合だけ、彩度と値テーブルはSとV値を変更します。それが、すべての解像度(48と64ビットイメージを含む)のために使われます。
オブジェクトモデル
構文
'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()
解説
詳細については、「明度とコントラストの変更」を参照してください。
サンプル

imageの上でRemapHueCommandを実行して、すべての緑色相(そして、緑の近くの色相)を変更します。

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, "cannon.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, "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:\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
必要条件

ターゲットプラットホーム

参照

参照

RemapHueCommandメンバ
Leadtools.ImageProcessing.Color名前空間
明度とコントラストの変更
ChangeIntensityCommandクラス
GammaCorrectCommandクラス
ChangeContrastCommandクラス
HistogramContrastCommandクラス
StretchIntensityCommandクラス
InvertCommandクラス
ChangeHueCommandクラス
ChangeSaturationCommandクラス
HistogramEqualizeCommandクラス
Leadtools.ImageProcessing.FillCommand
HistogramCommandクラス
Leadtools.ImageProcessing.Core.WindowLevelCommand