Leadtools.ColorConversion Send comments on this topic. | Back to Introduction - All Topics | Help Version 15.5.7
IccLookupTableBToATagType Class
See Also  Members   Example 
Leadtools.ColorConversion Namespace : IccLookupTableBToATagType Class




Contains the lutBToAType tag type data.

Object Model






Syntax

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

Example

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

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 IccLookupTableBToATagTypeExample()
   ' load an Icc Profile
   Dim iccProfile As New IccProfileExtended("C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\EmptyIcc.icc")

   ' "B Curves" should be of the same number as Input Channels
   ' They can be either IccTagCurveType or IccResponseCurveTagType fill the data
   Dim iccCurveType() As IccCurveTagType = {FillIccCurveTagType(), FillIccCurveTagType(), 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 Input Channels
   ' They can be either IccCurve or IccResponseCurve Fill the data
   Dim iccParametricCurveType() As IccParametricCurveTagType = {FillIccParametricCurveTagType(), _
      FillIccParametricCurveTagType(), _
      FillIccParametricCurveTagType()}

   ' define the CLUT
   Dim iccCLUT16 As New IccColorLookupTable16Bit()
   ' only the first i entries are used, where i is the number of input channels
   iccCLUT16.NumberOfGridPoints(0) = 1
   iccCLUT16.NumberOfGridPoints(1) = 1
   iccCLUT16.NumberOfGridPoints(2) = 1
   ' the percision that determins if we are using IccColorLookupTable
   ' 8Bit or 16Bit, 1 for 8-bit, and 2 for 16-bit
   iccCLUT16.Precision = 2
   ' and then the padding bytes
   iccCLUT16.Pad(0) = 0
   iccCLUT16.Pad(1) = 0
   iccCLUT16.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 * 1 * 1 * 2 (number of output channel) * 2 (Percision) = 4 Bytes = 2 ushort
   ReDim iccCLUT16.Data(1)
   iccCLUT16.Data(0) = 3
   iccCLUT16.Data(1) = 4

   ' "A Curves" should be of the same number as Output Channels
   ' They can be either IccCurve or IccResponseCurve
   Dim iccCurveTypeA() As IccCurveTagType = {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

   ' define the tag type
   Dim iccLUTBtoA As New IccLookupTableBToATagType(3, _
      2, _
      iccCurveType, _
      iccParametricCurveType, _
      iccCurveTypeA, _
      iccCLUT16, _
      iccMatrix)

   ' add the new tag to the ICC Profile
   iccProfile.AddTag(iccLUTBtoA, IccTag.BToA2Tag, IccTagTypeBase.LutBtoATypeSignature)

   ' 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("C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\IccLookupTableBToATagTypeVB.icc")
End Sub
C#Copy Code
public IccCurveTagType FillIccCurveTagType() 

   double myDoubleValue = 1.0; 
   ushort[] curveData = new ushort[1]; 
   curveData[0] = IccTools.FromDoubleToU8Fixed8Number(myDoubleValue); 
   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 IccLookupTableBToATagTypeExample() 

   // load an Icc Profile 
   IccProfileExtended iccProfile = new IccProfileExtended(@"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\EmptyIcc.icc"); 
 
   // "B Curves" should be of the same number as Input Channels 
   // They can be either IccCurveTagType or IccResponseCurveTagType 
   // fill the data 
   IccCurveTagType[] iccCurveType = new IccCurveTagType[3]; 
   iccCurveType[0] = FillIccCurveTagType(); 
   iccCurveType[1] = FillIccCurveTagType(); 
   iccCurveType[2] = 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 Input Channels 
   // They can be either IccCurve or IccResponseCurve 
   // Fill the data 
   IccParametricCurveTagType[] iccParametricCurveType = new IccParametricCurveTagType[3]; 
   iccParametricCurveType[0] = FillIccParametricCurveTagType(); 
   iccParametricCurveType[1] = FillIccParametricCurveTagType(); 
   iccParametricCurveType[2] = FillIccParametricCurveTagType(); 
 
   // define the CLUT 
   IccColorLookupTable16Bit iccCLUT16 = new IccColorLookupTable16Bit(); 
   // only the first i entries are used, where i is the number of input channels 
   iccCLUT16.NumberOfGridPoints[0] = 1; 
   iccCLUT16.NumberOfGridPoints[1] = 1; 
   iccCLUT16.NumberOfGridPoints[2] = 1; 
   // the percision that determins if we are using IccColorLookupTable  
   // 8Bit or 16Bit, 1 for 8-bit, and 2 for 16-bit 
   iccCLUT16.Precision = 2; 
   // and then the padding bytes 
   iccCLUT16.Pad[0] = 0; 
   iccCLUT16.Pad[1] = 0; 
   iccCLUT16.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 * 1 * 1 * 2 (number of output channel) * 2 (Percision) = 4 Bytes = 2 ushort 
   iccCLUT16.Data = new ushort[2]; 
   iccCLUT16.Data[0] = 3; 
   iccCLUT16.Data[1] = 4; 
 
   // "A Curves" should be of the same number as Output Channels 
   // They can be either IccCurve or IccResponseCurve 
   IccCurveTagType[] iccCurveTypeA = new IccCurveTagType[2]; 
   iccCurveTypeA[0] = FillIccCurveTagType(); 
   iccCurveTypeA[1] = 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 
 
   // define the tag type 
   IccLookupTableBToATagType iccLUTBtoA = new IccLookupTableBToATagType( 
      3,    // input channels 
      2,    // output channels 
      iccCurveType, 
      iccParametricCurveType, 
      iccCurveTypeA, 
      iccCLUT16, 
      iccMatrix); 
 
   // add the new tag to the ICC Profile 
   iccProfile.AddTag(iccLUTBtoA, IccTag.BToA2Tag, IccTagTypeBase.LutBtoATypeSignature); 
 
   // 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(@"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\IccLookupTableBToATagTypeCS.icc"); 
}

Remarks

Inheritance Hierarchy

System.Object
   Leadtools.ColorConversion.IccTagTypeBase
      Leadtools.ColorConversion.IccLookupTableBToATagType

Requirements

Target Platforms: Microsoft .NET Framework 2.0, Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

See Also