LEADTOOLS Color Conversion (Leadtools.ColorConversion assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
IccLookupTableAToBTagType Class
See Also  Members  
Leadtools.ColorConversion Namespace : IccLookupTableAToBTagType Class



Contains the lutAToBType tag type data.

Object Model

IccLookupTableAToBTagType ClassIccColorLookupTableBase ClassIccTagTypeBase ClassIccTagTypeBase ClassIccTagTypeBase ClassIccMatrix Structure

Syntax

Visual Basic (Declaration) 
Public Class IccLookupTableAToBTagType 
   Inherits IccTagTypeBase
Visual Basic (Usage)Copy Code
Dim instance As IccLookupTableAToBTagType
C# 
public class IccLookupTableAToBTagType : IccTagTypeBase 
C++/CLI 
public ref class IccLookupTableAToBTagType : public IccTagTypeBase 

Example

This example method can be used in creating an "lutAtoBType" mentioned in the ICC.1:2004-10 specification. The following information is used: input channels = 3, output channels = 1.

Visual BasicCopy Code
Public Function FillIccCurveTagType() As IccCurveTagType
      Dim myDoubleValue As Double = 1.5
      Dim curveData(0) As UShort
      curveData(0) = New UShort()
      curveData(0) = IccTools.FromDoubleToU8Fixed8Number(myDoubleValue)

      myDoubleValue = IccTools.FromU8Fixed8NumberToDouble(curveData(0))
      Dim iccCurve As New IccCurve(curveData)
      Dim iccCurveTagType As New IccCurveTagType(iccCurve)

      Return iccCurveTagType
   End Function

   Public Function FillIccParametricCurveTagType() As IccParametricCurveTagType
      Dim parameters() As Integer = {IccTools.FromDoubleTo2bFixed2bNumber(5.0)}
      Dim parametricCurve As New IccParametricCurve(IccFunctionsType.Function4Bytes, parameters)
      Dim parametricCurveTagType As New IccParametricCurveTagType(parametricCurve)

      Return parametricCurveTagType
   End Function


   Public Sub IccLookupTableAToBTagTypeExample()
      ' load an Icc Profile
      Dim iccProfile As New IccProfileExtended(Path.Combine(LEAD_VARS.ImagesDir, "EmptyIcc.icc"))

      ' "B Curves" should be of the same number as Output Channels
      ' They can be either IccTagCurveType or IccTagResponseCurveType fill the tag
      Dim iccCurveType() As IccCurveTagType = {FillIccCurveTagType()}

      ' define the "Matrix"
      Dim element() As Integer = {IccTools.FromDoubleTo2bFixed2bNumber(1.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(2.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(3.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(4.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(5.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(6.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(7.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(8.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(9.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(10.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(11.0), _
         IccTools.FromDoubleTo2bFixed2bNumber(12.0)}

      Dim iccMatrix As New IccMatrix(element)

      ' "M Curves" should be of the same number as Output Channels
      ' They can be either IccCurve or IccResponseCurve
      ' fill the tag
      Dim iccParametricCurveType() As IccParametricCurveTagType = {FillIccParametricCurveTagType()}

      ' define the CLUT
      Dim iccCLUT8 As New IccColorLookupTable8Bit()
      ' only the first i entries are used, where i is the number of input channels
      iccCLUT8.NumberOfGridPoints(0) = 1
      iccCLUT8.NumberOfGridPoints(1) = 2
      iccCLUT8.NumberOfGridPoints(2) = 3
      ' the percision that determins if we are using IccColorLookupTable 
      ' 8Bit or 16Bit, 1 for 8-bit, and 2 for 16-bit
      iccCLUT8.Precision = 1
      ' and then the padding bytes
      iccCLUT8.Pad(0) = 0
      iccCLUT8.Pad(1) = 0
      iccCLUT8.Pad(2) = 0
      ' and finally the CLUT data points (arranged as described in the text in 
      ' ICC.1:2004-10 specification, page 48
      ' The size of the data array is: multiplication of all the cells in the numberOfGridPoints array
      ' 1 * 2 * 3 * 1 (number of output channel) * 1 (Percision) = 6
      ReDim iccCLUT8.Data(5)
      iccCLUT8.Data(0) = 3
      iccCLUT8.Data(1) = 4
      iccCLUT8.Data(2) = 5
      iccCLUT8.Data(3) = 6
      iccCLUT8.Data(4) = 7
      iccCLUT8.Data(5) = 8

      ' "A Curves" should be of the same number as Input Channels
      ' They can be either IccCurve or IccResponseCurve
      ' fill the tags
      Dim iccCurveTypeA() As IccCurveTagType = {FillIccCurveTagType(), _
         FillIccCurveTagType(), _
         FillIccCurveTagType()}

      ' The data pointer will contain all the curve buffers in a sequential order, 
      ' the offset of the start of each curve buffer will be saved into the 
      ' appropriate offset variable in the class
      ' the data pointer will be created automatically inside the toolkit when
      ' the IccProfile.SetICCTagData() method is called

      ' define the tag type
      Dim iccLUTAtoB As New IccLookupTableAToBTagType(3, _
            1, _
            iccCurveType, _
            iccParametricCurveType, _
            iccCurveTypeA, _
            iccCLUT8, _
            iccMatrix)

      ' add the new tag to the ICC Profile
      iccProfile.AddTag(iccLUTAtoB, IccTag.AToB2Tag, IccTagTypeBase.LutAtoBTypeSignature)

      ' generate the new profile id
      iccProfile.GenerateProfileId()

      ' update the icc array with the new changes
      iccProfile.UpdateDataArray()

      ' write the Icc Profile into a new file
      iccProfile.GenerateIccFile(Path.Combine(LEAD_VARS.ImagesDir, "IccLookupTableAToBTagTypeVB.icc"))
   End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
public IccCurveTagType FillIccCurveTagType()
   {
      ushort[] curveData = new ushort[1];
      curveData[0] = IccTools.FromDoubleToU8Fixed8Number(1.5);
      IccCurve iccCurve = new IccCurve(curveData);
      IccCurveTagType iccCurveTagType = new IccCurveTagType(iccCurve);

      return iccCurveTagType;
   }

   public IccParametricCurveTagType FillIccParametricCurveTagType()
   {
      int[] parameters = new int[1];

      parameters[0] = IccTools.FromDoubleTo2bFixed2bNumber(5.0);
      IccParametricCurve parametricCurve = new IccParametricCurve(IccFunctionsType.Function4Bytes, parameters);
      IccParametricCurveTagType parametricCurveTagType = new IccParametricCurveTagType(parametricCurve);

      return parametricCurveTagType;
   }



   public void IccLookupTableAToBTagTypeExample()
   {
      // load an Icc Profile
      string fileName = Path.Combine(LEAD_VARS.ImagesDir, "EmptyIcc.icc");
      IccProfileExtended iccProfile = new IccProfileExtended(fileName);

      // "B Curves" should be of the same number as Output Channels
      // They can be either IccTagCurveType or IccTagResponseCurveType
      // fill the tag
      IccCurveTagType[] iccCurveType = new IccCurveTagType[1];
      iccCurveType[0] = FillIccCurveTagType();

      // define the "Matrix"
      int[] element = new int[12] {IccTools.FromDoubleTo2bFixed2bNumber(1.0),
         IccTools.FromDoubleTo2bFixed2bNumber(2.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(3.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(4.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(5.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(6.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(7.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(8.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(9.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(10.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(11.0), 
         IccTools.FromDoubleTo2bFixed2bNumber(12.0)};

      IccMatrix iccMatrix = new IccMatrix(element);

      // "M Curves" should be of the same number as Output Channels
      // They can be either IccCurve or IccResponseCurve
      // fill the tag
      IccParametricCurveTagType[] iccParametricCurveType = new IccParametricCurveTagType[1];
      iccParametricCurveType[0] = FillIccParametricCurveTagType();

      // define the CLUT
      IccColorLookupTable8Bit iccCLUT8 = new IccColorLookupTable8Bit();
      // only the first i entries are used, where i is the number of input channels
      iccCLUT8.NumberOfGridPoints[0] = 1;
      iccCLUT8.NumberOfGridPoints[1] = 2;
      iccCLUT8.NumberOfGridPoints[2] = 3;
      // the percision that determins if we are using IccColorLookupTable 
      // 8Bit or 16Bit, 1 for 8-bit, and 2 for 16-bit
      iccCLUT8.Precision = 1;
      // and then the padding bytes
      iccCLUT8.Pad[0] = 0;
      iccCLUT8.Pad[1] = 0;
      iccCLUT8.Pad[2] = 0;
      // and finally the CLUT data points (arranged as described in the text in 
      // ICC.1:2004-10 specification, page 48
      // The size of the data array is: multiplication of all the cells in the numberOfGridPoints array
      // 1 * 2 * 3 * 1 (number of output channel) * 1 (Percision) = 6
      iccCLUT8.Data = new Byte[6];
      iccCLUT8.Data[0] = 3;
      iccCLUT8.Data[1] = 4;
      iccCLUT8.Data[2] = 5;
      iccCLUT8.Data[3] = 6;
      iccCLUT8.Data[4] = 7;
      iccCLUT8.Data[5] = 8;

      // "A Curves" should be of the same number as Input Channels
      // They can be either IccCurve or IccResponseCurve
      // fill the tags
      IccCurveTagType[] iccCurveTypeA = new IccCurveTagType[3];
      iccCurveTypeA[0] = FillIccCurveTagType();
      iccCurveTypeA[1] = FillIccCurveTagType();
      iccCurveTypeA[2] = FillIccCurveTagType();

      // The data pointer will contain all the curve buffers in a sequential order, 
      // the offset of the start of each curve buffer will be saved into the 
      // appropriate offset variable in the class
      // the data pointer will be created automatically inside the toolkit when
      // the IccProfile.SetICCTagData() method is called

      // define the tag type
      IccLookupTableAToBTagType iccLUTAtoB = new IccLookupTableAToBTagType(
         3,    // input channels
         1,    // output channels
         iccCurveType,
         iccParametricCurveType,
         iccCurveTypeA,
         iccCLUT8,
         iccMatrix);

      // add the new tag to the ICC Profile
      iccProfile.AddTag(iccLUTAtoB, IccTag.AToB2Tag, IccTagTypeBase.LutAtoBTypeSignature);

      // generate the new profile id
      iccProfile.GenerateProfileId();

      // update the icc array with the new changes
      iccProfile.UpdateDataArray();

      // write the Icc Profile into a new file
      string IccfileName = Path.Combine(LEAD_VARS.ImagesDir, "IccLookupTableAToBTagTypeCS.icc");
      iccProfile.GenerateIccFile(IccfileName);
   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
SilverlightVBCopy Code

Remarks

Inheritance Hierarchy

System.Object
   Leadtools.ColorConversion.IccTagTypeBase
      Leadtools.ColorConversion.IccLookupTableAToBTagType

Requirements

Target Platforms: Silverlight 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only)

See Also