using Leadtools;
using Leadtools.ColorConversion;
public IccDateTimeTagType FillDateTimeTagType()
{
// get the current system data
System.DateTime sysDateTime = System.DateTime.Now;
// create a new iccDateTime class
IccDateTime iccDateTime = new IccDateTime((ushort)sysDateTime.Year,
(ushort)sysDateTime.Month,
(ushort)sysDateTime.Day,
(ushort)sysDateTime.Hour,
(ushort)sysDateTime.Minute,
(ushort)sysDateTime.Second);
// define the tag type
IccDateTimeTagType iccDateTimeTagType = new IccDateTimeTagType(iccDateTime);
return iccDateTimeTagType;
}
public IccXyzTagType FillIccXyzTagType()
{
// define the array of XYZ numbers
IccXyzNumber[] data = new IccXyzNumber[1];
data[0] = new IccXyzNumber(
IccTools.FromDoubleTo2bFixed2bNumber(1.0),
IccTools.FromDoubleTo2bFixed2bNumber(2.0),
IccTools.FromDoubleTo2bFixed2bNumber(3.0));
// define the tag type
IccXyzTagType xyzTagType = new IccXyzTagType(data);
return xyzTagType;
}
public void IccProfileExtendedExample()
{
// define the IccProfileExtended Class
IccProfileExtended iccProfile = new IccProfileExtended();
// define the IccHeader class
IccHeader header = IccHeader.Empty;
// filling the ICC header
// note that the Illuminant, ProfileSignature, and Version are filled
// with the default values in the IccProfile.Empty property,
// and they shouldn't be changed unless the user knows what he is doing
// the rest of the fields are the user's responsibility
// except for the ProfileID which will be filled automatically upon the call
// for the method IccProfile.GenerateProfileId, but this method must be called at the
// end when the ICC Profile is completely prepared.
// Finally, the Size field will be filled automatically by the different ICC methods,
// and it shouldn't be changed unless the user knows what he is doing.
header.CmmID = 0x6170706C; // any CMM ID
header.DeviceClass = IccProfileClassType.DeviceLinkClass;
header.ColorSpace = IccColorspaceType.LabData;
header.Pcs = IccColorspaceType.LabData;
header.ProfileSignature = 0x61637370; // any profile signature
header.Platform = IccPlatformSignatureType.MacintoshSignature;
header.Flags = IccProfileFlags.None;
header.Manufacturer = 0x46464549; // any manufacturer
header.Model = 0x0; // any model
header.Attributes = IccProfileMediaFlags.ColorMedia;
header.RenderingIntent = IccRenderingIntentType.AbsoluteColorimetric;
header.Creator = 0x46464549; // any creator
// set the system date/time as the date/time of the Icc Profile
System.DateTime sysDateTime = System.DateTime.Now;
IccDateTime iccDateTime = new IccDateTime((ushort)sysDateTime.Year,
(ushort)sysDateTime.Month,
(ushort)sysDateTime.Day,
(ushort)sysDateTime.Hour,
(ushort)sysDateTime.Minute,
(ushort)sysDateTime.Second);
header.DateTime = iccDateTime;
iccProfile.Header = header;
// create all the tags you want
// 1- mediaBlackPointTag (needs XYZ tag type)
IccXyzTagType xyzTagType = FillIccXyzTagType();
// then insert it into the profile
iccProfile.AddTag(xyzTagType, IccTag.MediaBlackPointTag, IccTagTypeBase.XyzTypeSignature);
// 2- calibrationDateTimeTag
IccDateTimeTagType dateTimeTagType = FillDateTimeTagType();
iccProfile.AddTag(dateTimeTagType, IccTag.CalibrationDateTimeTag, IccTagTypeBase.DateTimeTypeSignature);
// 3- and so on...
// to get the tag type signature of any tag in the profile,
int tagTypeSignature = iccProfile.GetTagTypeSignature(IccTag.MediaBlackPointTag);
// to delete one of the two tags
xyzTagType = (IccXyzTagType)iccProfile.DeleteTag(IccTag.MediaBlackPointTag);
// to get the calibrationDateTimeTag
dateTimeTagType = (IccDateTimeTagType)iccProfile.GetTag(IccTag.CalibrationDateTimeTag);
// at the end, generate the profileID. For the time being, it will be filled with 0's
iccProfile.GenerateProfileId();
// finally generate the new Icc Profile by updating the Data Array
// and then generating the file
iccProfile.UpdateDataArray();
string IccfileName = Path.Combine(LEAD_VARS.ImagesDir, "IccProfileExtendedCS.icc");
iccProfile.GenerateIccFile(IccfileName);
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";
}