|
|
|
|
|
|
|
|
|
|
|
|
|
|
little cms Engine 1.19
|
|
|
|
|
|
|
|
|
|
API Definition
|
|
|
|
|
|
|
|
|
|
by Marti Maria
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------
|
|
|
|
|
|
|
|
|
|
Index
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
|
|
0 - Compilation toggles
|
|
|
|
|
1 - Profile & Transform functions
|
|
|
|
|
2 - Information functions
|
|
|
|
|
3 - On-the-fly profile creation functions
|
|
|
|
|
4 - Build-In profiles
|
|
|
|
|
5 - White point
|
|
|
|
|
6 - Gamma handling
|
|
|
|
|
7 - Error handling
|
|
|
|
|
8 - Conversion functions
|
|
|
|
|
9 - CIECAM97s/CIECAM02
|
|
|
|
|
10 - Profile creation functions
|
|
|
|
|
11 - LUT manipultation
|
|
|
|
|
12 - Named color functions
|
|
|
|
|
13 - PostScript
|
|
|
|
|
14 - CGATS.13 - 200
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 - Compilation toggles
|
|
|
|
|
_________________________________
|
|
|
|
|
|
|
|
|
|
Generally, there is no need to touch anything. Comment/uncomment if the
|
|
|
|
|
testbet hints to do so.
|
|
|
|
|
|
|
|
|
|
Optimization mode.
|
|
|
|
|
|
|
|
|
|
USE_ASSEMBLER Is fastest by far, but it is limited to Pentium.
|
|
|
|
|
USE_FLOAT are the generic floating-point routines.
|
|
|
|
|
USE_C should work on virtually any machine.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Define this if you are using this package as a DLL (windows only)
|
|
|
|
|
|
|
|
|
|
LCMS_DLL
|
|
|
|
|
|
|
|
|
|
Define this if you are compiling using this package as a DLL (windows only)
|
|
|
|
|
|
|
|
|
|
LCMS_DLL_BUILD
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Uncomment if you are trying the engine in a non-windows environment
|
|
|
|
|
like linux, SGI, VAX, FreeBSD, BeOS, etc.
|
|
|
|
|
|
|
|
|
|
NON_WINDOWS
|
|
|
|
|
|
|
|
|
|
Uncomment this one if you are using big endian machines (only meaningful
|
|
|
|
|
when NON_WINDOWS is used)
|
|
|
|
|
|
|
|
|
|
USE_BIG_ENDIAN
|
|
|
|
|
|
|
|
|
|
Uncomment this one if your compiler/machine does support the
|
|
|
|
|
"long long" type This will speedup fixed point math. (USE_C only)
|
|
|
|
|
|
|
|
|
|
USE_INT64
|
|
|
|
|
|
|
|
|
|
Some machines does not have a reliable 'swab' function. Usually
|
|
|
|
|
leave commented unless the testbed diagnoses the contrary.
|
|
|
|
|
USE_CUSTOM_SWAB
|
|
|
|
|
|
|
|
|
|
Uncomment this if your compiler supports inline
|
|
|
|
|
|
|
|
|
|
USE_INLINE
|
|
|
|
|
|
|
|
|
|
Uncomment this if your compiler doesn't work with fast floor function
|
|
|
|
|
|
|
|
|
|
USE_DEFAULT_FLOOR_CONVERSION
|
|
|
|
|
|
|
|
|
|
Define this one if you are using windows.h in a non-windows environment
|
|
|
|
|
|
|
|
|
|
LCMS_WIN_TYPES_ALREADY_DEFINED
|
|
|
|
|
|
|
|
|
|
Define this one if you want lcms.h just defining public API
|
|
|
|
|
|
|
|
|
|
LCMS_APIONLY
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 - Profile & Transform functions
|
|
|
|
|
_________________________________
|
|
|
|
|
|
|
|
|
|
These are the basic functions on making transformations. For
|
|
|
|
|
simpler operation, you must open two profiles using
|
|
|
|
|
cmsOpenProfileFromFile(), then create a transform with these
|
|
|
|
|
opened profiles with cmsCreateTransform(). Using this transform
|
|
|
|
|
you can color correct your bitmaps by cmsDoTransform(). When you
|
|
|
|
|
are done you must free the transform AND the profiles by
|
|
|
|
|
cmsDeleteTransform() and cmsCloseProfile().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsOpenProfileFromFile(const char *ICCProfile, const char *sAccess);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Opens a profile returning a handle to it. The profile must be
|
|
|
|
|
contained in a file on disk.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
ICCProfile: File name w/ full path.
|
|
|
|
|
sAccess: "r" for normal operation, "w" for profile creation
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
NULL on error, a profile handle on success.
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
void GetProductNameOf(const char *ICMProfileFile)
|
|
|
|
|
{
|
|
|
|
|
cmsHPROFILE hProfile
|
|
|
|
|
|
|
|
|
|
hProfile = cmsOpenProfileFromFile(ICMProfileFile, "r");
|
|
|
|
|
if (hProfile == NULL) printf("Error!");
|
|
|
|
|
else {
|
|
|
|
|
printf("%s\n", cmsGetProductName(hProfile));
|
|
|
|
|
cmsCloseProfile(hProfile);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsOpenProfileFromMem(LPVOID MemPtr, DWORD dwSize);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Same as anterior, but profile is contained in memory. Usefull
|
|
|
|
|
for embedded profiles. MemPtr must point to a buffer of at
|
|
|
|
|
least dwSize bytes. This buffer must hold a full profile image.
|
|
|
|
|
Memory must be contiguous.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
MemPtr: Points to a block of contiguous memory containing the profile
|
|
|
|
|
dwSize: Profile's size measured in bytes.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
NULL on error, a profile handle on success.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsCloseProfile(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Closes a profile handle and frees associated memory. Note that
|
|
|
|
|
cmsDeleteTransform() does NOT close the involved profiles. You
|
|
|
|
|
must close any opened profile handle on cleanup.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
Comments:
|
|
|
|
|
|
|
|
|
|
Can return error when creating profile if the profile is not
|
|
|
|
|
properly flushed to disk.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHTRANSFORM cmsCreateTransform(cmsHPROFILE Input,
|
|
|
|
|
DWORD InputFormat,
|
|
|
|
|
cmsHPROFILE Output,
|
|
|
|
|
DWORD OutputFormat,
|
|
|
|
|
int Intent,
|
|
|
|
|
DWORD dwFlags); .
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a transform for translating bitmaps.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Input, Output: Input, Output profile handles
|
|
|
|
|
|
|
|
|
|
Input, Output format: This value describes how values are to be
|
|
|
|
|
coded. It is formed by a combination of
|
|
|
|
|
channels, bitdepths andextra samples. See
|
|
|
|
|
below.
|
|
|
|
|
|
|
|
|
|
for example:
|
|
|
|
|
|
|
|
|
|
TYPE_BGR_8 : 3 channels of 8 bits, using Windows convention
|
|
|
|
|
TYPE_RGB_8 : 3 channels of 8 bits per component
|
|
|
|
|
TYPE_RGB_16 : 3 channels of 16 bits per component
|
|
|
|
|
TYPE_RGBA_8 : 4 channels, 3 containing RGB of 8 bpc, and one channel of 8 bits holding alpha
|
|
|
|
|
...
|
|
|
|
|
|
|
|
|
|
Note than even some Lab and XYZ are defined, these specifiers
|
|
|
|
|
has nothing to do with colorspaces, but only how data is
|
|
|
|
|
encoded. The CMM will only check for same colorspace as profile.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Intent: The ICC intent to apply. If an appropiate tag for this
|
|
|
|
|
intent is not found, no error is raised and the intent
|
|
|
|
|
is reverted to perceptual. See the tutorial for a
|
|
|
|
|
explanation of intents.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INTENT_PERCEPTUAL 0
|
|
|
|
|
INTENT_RELATIVE_COLORIMETRIC 1
|
|
|
|
|
INTENT_SATURATION 2
|
|
|
|
|
INTENT_ABSOLUTE_COLORIMETRIC 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dwFlags: This value commands on how to handle the whole
|
|
|
|
|
process. Some or none of this values can be joined
|
|
|
|
|
via the or | operator.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_MATRIXINPUT: CLUT ignored on input profile,
|
|
|
|
|
matrix-shaper used instead (for
|
|
|
|
|
speed, and debugging purposes)
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_MATRIXOUTPUT: Same as anterior, but for output
|
|
|
|
|
profile only.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_MATRIXONLY: Both input and output are forced to
|
|
|
|
|
matrix-shaper.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOTPRECALC: By default, lcms smelt luts into a
|
|
|
|
|
device-link CLUT. This speedup whole
|
|
|
|
|
transform greatly. If you don't
|
|
|
|
|
wanna this, and wish every value to
|
|
|
|
|
be translated to PCS and back to
|
|
|
|
|
output space, include this flag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NULLTRANFORM: Don't transform anyway, only apply
|
|
|
|
|
pack/unpack routines (usefull to
|
|
|
|
|
deactivate color correction but keep
|
|
|
|
|
formatting capabilities)
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_HIGHRESPRECALC: Use 48 points instead of 33 for
|
|
|
|
|
device-link CLUT precalculation. Not needed
|
|
|
|
|
but for the most extreme cases of mismatch
|
|
|
|
|
of "impedance" between profiles.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_LOWRESPRECALC: Use lower resolution table.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_GRIDPOINTS(n): You can specify the desired number of gridpoints
|
|
|
|
|
in devicelink by using this macro in the flags.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_BLACKPOINTCOMPENSATION: Use BPC algorithm.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_PRESERVEBLACK: Preserve K channel on CMYK -> CMYK transforms
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOTCACHE: Inhibit the 1-pixel built-in cache
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOWHITEONWHITEFIXUP: Do NOT fix white-on-white broken profiles
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOPRELINEARIZATION: Do NOT use prelinearization tables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
NULL on error, a transform handle on success.
|
|
|
|
|
|
|
|
|
|
Comments:
|
|
|
|
|
|
|
|
|
|
This function tries to build a device link profile using the
|
|
|
|
|
Input and Output profiles. This small time-consuming penalty (3
|
|
|
|
|
sec. on a Pentium-100) does accelerate the bitmap transform
|
|
|
|
|
process greately. You can override this behaviour if you wish,
|
|
|
|
|
or if you plan to transform only a couple of pixels by using
|
|
|
|
|
cmsFLAGS_NOTPRECALC on dwFlags parameter. But normally it will
|
|
|
|
|
be better leave this flag alone.
|
|
|
|
|
|
|
|
|
|
Also, in this function is where you must specify the format of
|
|
|
|
|
the input and output bitmaps. The InputFormat and OutputFormat
|
|
|
|
|
parameters are formed by combining several bits:
|
|
|
|
|
|
|
|
|
|
// Format of pixel is defined by one integer, using bits as follows
|
|
|
|
|
//
|
|
|
|
|
// TTTTT - Y F P X S EEE CCCC BBB
|
|
|
|
|
//
|
|
|
|
|
// T: Pixeltype
|
|
|
|
|
// F: Flavor 0=MinIsBlack(Chocolate) 1=MinIsWhite(Vanilla)
|
|
|
|
|
// P: Planar? 0=Chunky, 1=Planar
|
|
|
|
|
// X: swap 16 bps endianess?
|
|
|
|
|
// S: Do swap? ie, BGR, KYMC
|
|
|
|
|
// E: Extra samples
|
|
|
|
|
// C: Channels (Samples per pixel)
|
|
|
|
|
// B: Bytes per sample
|
|
|
|
|
// Y: Swap first - changes ABGR to BGRA and KCMY to CMYK
|
|
|
|
|
// -: Unused (reserved)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lcms.h does include several predefined specifiers, as examples:
|
|
|
|
|
|
|
|
|
|
TYPE_RGB_8 8 bits per sample RGB
|
|
|
|
|
TYPE_BGR_8 8 bits per sample BGR (Windows Bitmaps are often
|
|
|
|
|
coded in this way)
|
|
|
|
|
TYPE_RGB_16 16 bits per sample RGB
|
|
|
|
|
TYPE_RGBA_8 8 bits per sample RGB plus alpha channel. Alpha is
|
|
|
|
|
ignored by lcms.
|
|
|
|
|
TYPE_RGBA_16 16 bits per sample RGB plus alpha.
|
|
|
|
|
TYPE_XYZ_16 16 bits fixed 15.16 XYZ (used in PCS)
|
|
|
|
|
TYPE_Lab_8 8 bits per sample Lab
|
|
|
|
|
TYPE_Lab_16 16 bits per sample Lab
|
|
|
|
|
TYPE_CMY_8 8 bits per sample CMY
|
|
|
|
|
TYPE_CMY_16 16 bits per sample CMY
|
|
|
|
|
TYPE_CMYK_8 8 bits per sample CMYK
|
|
|
|
|
TYPE_CMYK_16 16 bits per sample CMY
|
|
|
|
|
|
|
|
|
|
You can build your own specifiers if you wish by combining the following macros with the bitwise OR operator |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DOSWAP_SH(e) 1 or 0 depending on swap even channels
|
|
|
|
|
EXTRA_SH(e) up to 7 extra channels
|
|
|
|
|
CHANNELS_SH(c) up to 4 handled channels
|
|
|
|
|
BYTES_SH(b) 1 if 16 bits per sample, 0 if 8 bits per sample
|
|
|
|
|
ENDIAN16_SH(e) 1 if 16 bits samples comes swapped.
|
|
|
|
|
SWAPFIRST_SH(s) 1 changes ABGR to BGRA and KCMY to CMYK
|
|
|
|
|
FLAVOR_SH(s) 0 = BlackIsZero (Chocolate) 1=WhiteIsZero (Vanilla, Negative)
|
|
|
|
|
PLANAR_SH(p) 0 = Chunky, 1=Planar
|
|
|
|
|
COLORSPACE_SH(s)
|
|
|
|
|
|
|
|
|
|
Available Colorspaces
|
|
|
|
|
=====================
|
|
|
|
|
|
|
|
|
|
PT_ANY Don't check colorspace
|
|
|
|
|
1 & 2 are reserved
|
|
|
|
|
PT_GRAY
|
|
|
|
|
PT_RGB
|
|
|
|
|
PT_CMY
|
|
|
|
|
PT_CMYK
|
|
|
|
|
PT_YCbCr
|
|
|
|
|
PT_YUV
|
|
|
|
|
PT_XYZ
|
|
|
|
|
PT_Lab
|
|
|
|
|
PT_YUVK
|
|
|
|
|
PT_HSV
|
|
|
|
|
PT_HLS
|
|
|
|
|
PT_Yxy
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
See the lcms.h for more information on how to build format specifiers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHTRANSFORM cdecl cmsCreateProofingTransform(cmsHPROFILE Input,
|
|
|
|
|
DWORD InputFormat,
|
|
|
|
|
cmsHPROFILE Output,
|
|
|
|
|
DWORD OutputFormat,
|
|
|
|
|
cmsHPROFILE Proofing,
|
|
|
|
|
int Intent,
|
|
|
|
|
int ProofingIntent,
|
|
|
|
|
DWORD dwFlags);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Same as cmsCreateTransform(), but including soft-proofing. The
|
|
|
|
|
obtained transform emulates the device described by the
|
|
|
|
|
"Proofing" profile. Useful to preview final result whithout
|
|
|
|
|
rendering to physical medium.
|
|
|
|
|
|
|
|
|
|
Parameters and returns same as anterior, but with the addition of
|
|
|
|
|
|
|
|
|
|
Proofing: a handle to proofing profile.
|
|
|
|
|
|
|
|
|
|
ProofingIntent: Is the intent for translating emulated
|
|
|
|
|
colors. Default is
|
|
|
|
|
|
|
|
|
|
INTENT_ABSOLUTE_COLORIMETRIC.
|
|
|
|
|
|
|
|
|
|
dwFlags:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_GAMUTCHECK: Color out of gamut are flagged to a
|
|
|
|
|
fixed color defined by the function
|
|
|
|
|
cmsSetAlarmCodes(int r, int g, int b);
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_SOFTPROOFING: (Does need preview tag to work) does
|
|
|
|
|
emulate the Proofing device.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
You need to add a combination of these flags to enable any proof!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHTRANSFORM cmsCreateMultiprofileTransform(cmsHPROFILE hProfiles[],
|
|
|
|
|
int nProfiles,
|
|
|
|
|
DWORD InputFormat,
|
|
|
|
|
DWORD OutputFormat,
|
|
|
|
|
int Intent,
|
|
|
|
|
DWORD dwFlags);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
User passes in an array of handles to open profiles. The returned handle
|
|
|
|
|
does "smelt" all profiles in only one devicelink. Following rules should
|
|
|
|
|
be followed:
|
|
|
|
|
|
|
|
|
|
- Colorspaces must be paired with the exception of
|
|
|
|
|
Lab/XYZ, that can be interchanged.
|
|
|
|
|
|
|
|
|
|
- Profile must be Matrix-shaper, or hold the
|
|
|
|
|
apropiate tag, device-to-pcs or pcs-to-device on depending
|
|
|
|
|
on profile location.
|
|
|
|
|
|
|
|
|
|
- All colorspaces up to 4 (significant) channels can be used
|
|
|
|
|
anywhere on the chain, Hexachrome separation or more can only
|
|
|
|
|
appair at last step. This limitation is intended to be solved in
|
|
|
|
|
future releases.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Let's take as example, how to apply a abstract profile into a SRGB image.
|
|
|
|
|
The chain would be sRGB -> Abstract -> sRGB. So, we would open sRGB and the
|
|
|
|
|
abstract profile, and fill the array
|
|
|
|
|
|
|
|
|
|
Profiles[0] = hsRGB;
|
|
|
|
|
Profiles[1] = hAbstract;
|
|
|
|
|
Profiles[2] = hsRGB;
|
|
|
|
|
|
|
|
|
|
cmsCreateMultiprofileTransform(Profiles, 3, TYPE_RGB_8, TYPE_RGB_8, INTENT_PERCEPTUAL, 0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WARNING: he dE rises with the number of profiles.
|
|
|
|
|
|
|
|
|
|
This can be used, for example, with abstract profiles. For example, abstract
|
|
|
|
|
profiles can be applied into a typical profile-to-profile color flow to model
|
|
|
|
|
viewing conditions.
|
|
|
|
|
|
|
|
|
|
Once created, the transform will behave just like any other.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsDeleteTransform(cmsHTRANSFORM hTransform);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Closes a transform handle and frees associated memory.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hTransform: The transform handle to be deleted.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comments: This function does NOT free any profiles associated
|
|
|
|
|
with the transform. Is programmer's responsability to free
|
|
|
|
|
them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsDoTransform(cmsHTRANSFORM hTransform,
|
|
|
|
|
LPVOID InputBuffer,
|
|
|
|
|
LPVOID OutputBuffer, unsigned int Size);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function translates bitmaps according of transform. Format
|
|
|
|
|
of buffers is described by InputFormat and OutputFormat
|
|
|
|
|
parameters in function cmsCreateTransform() or
|
|
|
|
|
cmsCreateProofingTransform()
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hTransform: A handle to a transform describing the translation.
|
|
|
|
|
InputBuffer: A pointer to a input bitmap
|
|
|
|
|
OutputBuffer: A pointer to a output bitmap.
|
|
|
|
|
Size: the number of PIXELS to be transformed.
|
|
|
|
|
|
|
|
|
|
Comments:
|
|
|
|
|
|
|
|
|
|
Windows, stores the bitmaps in a particular way... for speed
|
|
|
|
|
purposes, does align the scanlines to doubleword boundaries, so
|
|
|
|
|
a bitmap has in windows always a size multiple of 4. This is
|
|
|
|
|
ok, since no matter if you waste a couple of bytes, but if you
|
|
|
|
|
call cmsDoTransform() and passes it WHOLE image, lcms doesn't
|
|
|
|
|
know nothing about this extra padding bytes. So, it assumes
|
|
|
|
|
that you are passing a block of BGR triplets with no alignment
|
|
|
|
|
at all. This result in a strange looking "lines" in obtained
|
|
|
|
|
bitmap.
|
|
|
|
|
|
|
|
|
|
The solution most evident is to convert scanline by scanline
|
|
|
|
|
instead of whole image. This is as easy as to add a for() loop,
|
|
|
|
|
and the time penalty is so low that is impossible to detect.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsChangeBuffersFormat(cmsHTRANSFORM hTransform,
|
|
|
|
|
DWORD dwInputFormat,
|
|
|
|
|
DWORD dwOutputFormat)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This function does change the encoding of buffers in a yet-existing transform.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hTransform: A handle to the transform.
|
|
|
|
|
|
|
|
|
|
Input, Output format: This value describes how values are to be
|
|
|
|
|
coded. It is formed by a combination of
|
|
|
|
|
channels, bitdepths andextra samples.
|
|
|
|
|
See cmsCreateTransform for more info.
|
|
|
|
|
|
|
|
|
|
Notes:
|
|
|
|
|
|
|
|
|
|
Colorspace is *not* checked
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsTransform2DeviceLink(cmsHTRANSFORM hTransform, DWORD dwFlags);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Generates a device-link profile from a transform. This profile can then be used
|
|
|
|
|
by any other function accepting profile handle, or be saved on disk
|
|
|
|
|
by _cmsSaveProfile(). See icclink.c for a sample.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hTransform: A handle to the transform.
|
|
|
|
|
|
|
|
|
|
Flags:
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_GUESSDEVICECLASS: Mark the profile profile class "guessing"
|
|
|
|
|
from input & output colorspaces.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_HIGHRESPRECALC: Use 48 points instead of 33 for
|
|
|
|
|
device-link CLUT precalculation. Not needed
|
|
|
|
|
but for the most extreme cases of mismatch
|
|
|
|
|
of "impedance" between profiles.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_LOWRESPRECALC: Use lower resolution table.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_GRIDPOINTS(n): You can specify the desired number of gridpoints
|
|
|
|
|
in devicelink by using this macro in the flags.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_BLACKPOINTCOMPENSATION: Use BPC algorithm.
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_PRESERVEBLACK: Preserve K channel on CMYK -> CMYK transforms
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOTCACHE: Inhibit the 1-pixel built-in cache
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOWHITEONWHITEFIXUP: Do NOT fix white-on-white broken profiles
|
|
|
|
|
|
|
|
|
|
cmsFLAGS_NOPRELINEARIZATION: Do NOT use prelinearization tables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 - Information functions
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
These functions are intended for identify profiles. Its main use
|
|
|
|
|
if for building user interfaces.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetLanguage(int LanguageCode, int CountryCode);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function applies only to v4 profiles, which may have multilocalized
|
|
|
|
|
strings for information functions. Using cmsSetLanguage(), you set the preferred
|
|
|
|
|
language and country in what you want the information. All strings are searched
|
|
|
|
|
for an exact match of language and country. In none found, then another search
|
|
|
|
|
is done for same language, ignoring country. If no matching is found, the first
|
|
|
|
|
string in table is returned.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
LanguageCode: first name language code from ISO-639.
|
|
|
|
|
http://lcweb.loc.gov/standards/iso639-2/iso639jac.html
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CountryCode: first name region code from ISO-3166.
|
|
|
|
|
http://www.iso.ch/iso/en/prods-services/iso3166ma/index.html
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsTakeProductName(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a pointer to a string containing the product name. The
|
|
|
|
|
string is holded in a static buffer that is overwritten in
|
|
|
|
|
every call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsTakeProductDesc(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a pointer to a string containing the product Description. The
|
|
|
|
|
string is holded in a static buffer that is overwritten in
|
|
|
|
|
every call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Product description in a static buffer overwritten in each
|
|
|
|
|
call to this function.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsTakeProductInfo(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a pointer to a string containing additional info about
|
|
|
|
|
hProfile. The string is holded in a static buffer overwritten
|
|
|
|
|
in each call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Product info in a static buffer overwritten in each
|
|
|
|
|
call to this function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsTakeManufacturer(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a pointer to a string containing uncooked info about
|
|
|
|
|
manufacturer. The string is holded in a static buffer overwritten
|
|
|
|
|
in each call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Manufacturer in a static buffer overwritten in each
|
|
|
|
|
call to this function.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsTakeModel(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a pointer to a string containing uncooked info about
|
|
|
|
|
model. The string is holded in a static buffer overwritten
|
|
|
|
|
in each call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Model description in a static buffer overwritten in each
|
|
|
|
|
call to this function.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsTakeCopyright(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a pointer to a string containing uncooked info about
|
|
|
|
|
copyright. The string is holded in a static buffer overwritten
|
|
|
|
|
in each call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Copyright info in a static buffer overwritten in each
|
|
|
|
|
call to this function.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
icColorSpaceSignature cmsGetPCS(cmsHPROFILE hProfile)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function returns the PCS used by the hProfile, using the
|
|
|
|
|
ICC convention.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The PCS of the profile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
icColorSpaceSignature cmsGetColorSpace(cmsHPROFILE hProfile)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function returns the Color space used by the hProfile,
|
|
|
|
|
using the ICC convention.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The color space of the profile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
DWORD cmsGetProfileICCversion(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns the ICC version as stated in the header of the profile.
|
|
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
|
|
V2 profiles: 0x2000000
|
|
|
|
|
V4 profiles: 0x4000000
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The profile version stamp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
icProfileClassSignature cmsGetDeviceClass(cmsHPROFILE hProfile)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function returns the Device class of hProfile, using the
|
|
|
|
|
ICC convention.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The device class of the profile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsTakeMediaWhitePoint(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function takes the white point of hProfile.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dest: a pointer to an cmsCIEXYZ struct that will hold the
|
|
|
|
|
media white point
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsTakeMediaBlackPoint(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function takes the contents of black point tag of hProfile if present.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
Dest: a pointer to an cmsCIEXYZ struct that will
|
|
|
|
|
hold the media black point.
|
|
|
|
|
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
NOTES: Most profiles have garbage in this tag, for a suitable black point
|
|
|
|
|
detection use cmsDetectBlackPoint() instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsTakeIluminant(LPcmsCIEXYZ Dest, cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function takes the value of PCS illuminant of hProfile.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
Dest: a pointer to an cmsCIEXYZ struct that will
|
|
|
|
|
hold the illuminant white point
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
Notes: ICC states that profile illuminants MUST be D50. However,
|
|
|
|
|
in real world, each manufacturer uses an illuminant value that
|
|
|
|
|
differs slightly of D50. lcms forces it to D50 to prevent errors.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsTakeColorants(LPcmsCIEXYZTRIPLE Dest, cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function takes the value of colorant matrix of hProfile if
|
|
|
|
|
present.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
Dest: a pointer to an cmsCIEXYZ struct that will
|
|
|
|
|
hold the illuminant white point
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notes: Some profiles includes colorants even if a CLUT is already present.
|
|
|
|
|
Often this colorants are private values, or a way to allow the profile
|
|
|
|
|
operate in reverse direction.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
icInt32Number cmsGetTagCount(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Return number of tags contained in a profile
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Number of tags
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
icTagSignature cmsGetTagSignature(cmsHPROFILE hProfile, icInt32Number n);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Enumerates tags in a profile
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
n : Tag ordinal
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
Tag signature
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIsTag(cmsHPROFILE hProfile, icTagSignature sig);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Tests whatever a particular tag is present in hProfile.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
sig: a tag signature
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE if not present, TRUE if tag is found
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsTakeRenderingIntent(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns the rendering intent field of the header. This field is informative and not
|
|
|
|
|
used by the CMM for any purpose.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns: one of the following values:
|
|
|
|
|
|
|
|
|
|
INTENT_PERCEPTUAL 0
|
|
|
|
|
INTENT_RELATIVE_COLORIMETRIC 1
|
|
|
|
|
INTENT_SATURATION 2
|
|
|
|
|
INTENT_ABSOLUTE_COLORIMETRIC 3
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsTakeHeaderFlags(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns the flags field of the ICC profile header. These are flags to indicate
|
|
|
|
|
various hints for the CMM such as distributed processing and caching options.
|
|
|
|
|
The least significant 16 bits are reserved for the ICC.
|
|
|
|
|
|
|
|
|
|
Currently (v4.2) there are only two ICC flags defined:
|
|
|
|
|
|
|
|
|
|
Bit Meaning
|
|
|
|
|
--- -------------------------------------------------------------
|
|
|
|
|
0 Embedded Profile (0 if not embedded, 1 if embedded in file)
|
|
|
|
|
1 Profile cannot be used independently from the embedded color data
|
|
|
|
|
(set to 1 if true, 0 if false)
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The header flags
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsTakeHeaderAttributes(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns the attributes field of the ICC profile header. The device attributes
|
|
|
|
|
field shall contain flags used to identify attributes unique to the particular
|
|
|
|
|
device setup for which the profile is applicable.
|
|
|
|
|
|
|
|
|
|
Currently (v4.2) there are only two ICC attributes defined:
|
|
|
|
|
|
|
|
|
|
Bit Meaning
|
|
|
|
|
--- -------------------------------------------------------------
|
|
|
|
|
0 0=icReflective 1=icTransparency
|
|
|
|
|
1 0=icGlossy 1=icMatte
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
The header attributes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIsIntentSupported(cmsHPROFILE hProfile, int Intent, int UsedDirection);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This one helps on inquiring if a determinate intent is
|
|
|
|
|
supported by an opened profile. You must give a handle to
|
|
|
|
|
profile, the intent and a third parameter specifying how the
|
|
|
|
|
profile would be used. The function does return TRUE if intent
|
|
|
|
|
is supported or FALSE if not. If the intent is not supported,
|
|
|
|
|
lcms will use default intent (usually perceptual).
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Intent: one of the following values:
|
|
|
|
|
|
|
|
|
|
INTENT_PERCEPTUAL 0
|
|
|
|
|
INTENT_RELATIVE_COLORIMETRIC 1
|
|
|
|
|
INTENT_SATURATION 2
|
|
|
|
|
INTENT_ABSOLUTE_COLORIMETRIC 3
|
|
|
|
|
|
|
|
|
|
Direction:
|
|
|
|
|
|
|
|
|
|
LCMS_USED_AS_INPUT 0
|
|
|
|
|
LCMS_USED_AS_OUTPUT 1
|
|
|
|
|
LCMS_USED_AS_PROOF 2
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
TRUE if intent is supported or FALSE if not.
|
|
|
|
|
If the intent is not supported, lcms will use default
|
|
|
|
|
intent (usually perceptual).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsTakeCharTargetData(cmsHPROFILE hProfile, char** Data, size_t* len);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Retrieves the target data the profiler has used to build the profile. Usage
|
|
|
|
|
of this tag is optional. The lprof profiles does store such information when
|
|
|
|
|
"verbose" mode is selected.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Data: Pointer to a pointer to a bite block. This function allocates
|
|
|
|
|
this block by calling malloc(). User is responsible of free it after
|
|
|
|
|
use.
|
|
|
|
|
|
|
|
|
|
size: Pointer to a size_t variable holding the size of datablock.
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
TRUE on success, FALSE on error or if the profile has not such tag.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
char* TargetData;
|
|
|
|
|
size_t len;
|
|
|
|
|
|
|
|
|
|
cmsTakeCharTargetData(hProfile, &Data, &len);
|
|
|
|
|
|
|
|
|
|
... do whatsever with Data...
|
|
|
|
|
|
|
|
|
|
free(Data);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const LPBYTE cmsTakeProfileID(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returns the 16-bytes profile ID (version 4 only). The ProfileID is holded in
|
|
|
|
|
a static buffer overwritten in each call to this function.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
A pointer to a static buffer holding the 16 bytes ID. This buffer
|
|
|
|
|
is overwritten in each function call.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL _cmsIsMatrixShaper(cmsHPROFILE hProfile);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Tests whatever a particular profile is implemented as Matrix-shaper-
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
TRUE or FALSE about profile being implemented as matrix-shaper
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetAlarmCodes(int r, int g, int b)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Used to establish the out-of-gamut alarm color. This color will
|
|
|
|
|
replace all out-of-gamut colors if sFLAGS_GAMUTCHEK is used in
|
|
|
|
|
dwFlags parameter. See cmsCreateTransform()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void _cmsSetLUTdepth(cmsHPROFILE hProfile, int depth);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
INTERNAL, USE WITH CAUTION.
|
|
|
|
|
|
|
|
|
|
Used to inform the profile writting logic that all LUTS should be written
|
|
|
|
|
in 8-bit resolution. lcms currently allows to write profiles with same
|
|
|
|
|
resolution in all LUTS. Incoming versions may fix that.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hProfile: Handle to an open profile
|
|
|
|
|
|
|
|
|
|
depth: either 8 or 16
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL _cmsSaveProfile(cmsHPROFILE hProfile, const char* FileName);
|
|
|
|
|
LCMSBOOL _cmsSaveProfileToMem(cmsHPROFILE hProfile, void *MemPtr, size_t* BytesNeeded);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
INTERNAL, USE WITH CAUTION.
|
|
|
|
|
|
|
|
|
|
Dumps the contents of a profile FULLY GENERATED BY USING VIRTUAL PROFILES to disk
|
|
|
|
|
or memory. Disk based profiles are not suitable for these functions.
|
|
|
|
|
|
|
|
|
|
DEPRECATED, use cmsOpenProfileFromFile() with a "w" as access mode instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
3 - On-the-fly (virtual) profile creation functions
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
These function gives the ability of create virtual profiles.
|
|
|
|
|
These profiles are often used in modelling monitors, but can
|
|
|
|
|
also be used as any input or output device. Once created, you
|
|
|
|
|
can use the profile handle like another file-based profile.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateGrayProfile(LPcmsCIExyY WhitePoint,
|
|
|
|
|
LPGAMMATABLE TransferFunction)
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a grayscale virtual profile based on white point and transfer tables.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
White point: You can specify chromacity of white point,
|
|
|
|
|
or use cmsWhitePointFromTemp() to generate
|
|
|
|
|
the white point from temperature.
|
|
|
|
|
|
|
|
|
|
Gamma tables: You can directly specify tables or use the
|
|
|
|
|
gamma handling functions for obtaining these
|
|
|
|
|
tables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateRGBProfile(LPcmsCIExyY WhitePoint,
|
|
|
|
|
LPcmsCIExyYTRIPLE Primaries,
|
|
|
|
|
LPGAMMATABLE TransferFunction[3])
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a virtual profile based in primaries, white point and
|
|
|
|
|
transfer tables.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
White point: You can specify chromacity of white point,
|
|
|
|
|
or use cmsWhitePointFromTemp() to generate
|
|
|
|
|
the white point from temperature.
|
|
|
|
|
|
|
|
|
|
Primaries: The primaries (the TRUE primaries, not the
|
|
|
|
|
colorants) of the device.
|
|
|
|
|
|
|
|
|
|
Gamma tables: You can directly specify tables or use the
|
|
|
|
|
gamma handling functions for obtaining these
|
|
|
|
|
tables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateLinearizationDeviceLink(icColorSpaceSignature ColorSpace,
|
|
|
|
|
LPGAMMATABLE TransferFunctions[]);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a specialized devicelink, operating in space "ColorSpace". This devicelink
|
|
|
|
|
has only linearization tables. Usefull for embedding gamma/brightness/contrast controls
|
|
|
|
|
in a multiprofile transform.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TransferFunctions[] must contain as many curves as components has the target
|
|
|
|
|
color space. For example, RGB must be 3 curves. CMYK needs 4 curves.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE LCMSEXPORT cmsCreateInkLimitingDeviceLink(icColorSpaceSignature ColorSpace,
|
|
|
|
|
double Limit)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a specialized devicelink, operating in space "ColorSpace". This devicelink
|
|
|
|
|
handles ink-limiting feature. Useful for RIP construction and other goodies
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hTransform: A handle to the transform.
|
|
|
|
|
Limit: The amount of ink-limit, in pertentage. Allowable values are from 0% to 400%
|
|
|
|
|
|
|
|
|
|
Notes:
|
|
|
|
|
Currently only works on CMYK, but Hexachrome support is expected in
|
|
|
|
|
future revisions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateBCHSWabstractProfile(int nLUTPoints,
|
|
|
|
|
double Bright,
|
|
|
|
|
double Contrast,
|
|
|
|
|
double Hue,
|
|
|
|
|
double Saturation,
|
|
|
|
|
int TempSrc,
|
|
|
|
|
int TempDest);
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a abstract devicelink operating in Lab for Bright/Contrast/Hue/Saturation
|
|
|
|
|
and white point translation. White points are specified as temperatures <20>K
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
int nLUTPoints : Resulting CLUT resolution
|
|
|
|
|
double Bright : Bright increment. May be negative
|
|
|
|
|
double Contrast : Contrast increment. May be negative.
|
|
|
|
|
double Hue : Hue displacement in degree.
|
|
|
|
|
double Saturation : Saturation increment. May be negative
|
|
|
|
|
int TempSrc : Source white point temperature
|
|
|
|
|
int TempDest : Destination white point temperature.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Renges:
|
|
|
|
|
Bright:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
4 - Built-In profiles
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
These are standard profiles optimized for speed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateLabProfile(LPcmsCIExyY WhitePoint);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a virtual profile of CIE Lab. If WhitePoint is NULL,
|
|
|
|
|
then D50 is assumed. It uses v2 PCS encoding.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateLab4Profile(LPcmsCIExyY WhitePoint);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a virtual profile of CIE Lab operanting in v4 PCS encoding.
|
|
|
|
|
If WhitePoint is NULL, then D50 is assumed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreateXYZProfile(void);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a virtual XYZ profile (Assumes D50)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
cmsHPROFILE cmsCreate_sRGBProfile(void);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Creates a virtual profile of sRGB standard colorspace.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
5 - White point
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsWhitePointFromTemp(int TempK, LPcmsCIExyY WhitePoint);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Obtains the chromaticity of white point based on temperature <20>K
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
TempK: Temperature in <20>K
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSAPI LCMSBOOL LCMSEXPORT cmsAdaptToIlluminant(LPcmsCIEXYZ Result,
|
|
|
|
|
LPcmsCIEXYZ SourceWhitePt,
|
|
|
|
|
LPcmsCIEXYZ Illuminant,
|
|
|
|
|
LPcmsCIEXYZ Value);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Provides a model-dependent chromatic adaptation between two illuminants,
|
|
|
|
|
actually it uses a Von-Kries approximation of Bradford, using the Lam-Rigg
|
|
|
|
|
cone responses. It Is under consideration to be replaced for a more
|
|
|
|
|
proper model like CIECAM97s in futures versions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
Result: Points to resulting XYZ color
|
|
|
|
|
SourceWhitePoint: original white point
|
|
|
|
|
Illuminant: adapting illuminant
|
|
|
|
|
Value: the original color
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
FALSE on error, TRUE on success
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
double cmsSetAdaptationState(double d);
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Specifies adaptation state of observer for V4 absolute colorimetric transforms.
|
|
|
|
|
Only two values are implemented:
|
|
|
|
|
|
|
|
|
|
d = 0: No adaptation
|
|
|
|
|
d = 1: Observer is fully adapted
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
6 - Gamma handling functions
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is the struct of a gamma table (or transfer function)
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
int nEntries;
|
|
|
|
|
WORD GammaTable[1];
|
|
|
|
|
|
|
|
|
|
} GAMMATABLE, FAR* LPGAMMATABLE;
|
|
|
|
|
|
|
|
|
|
That is, first it comes a 32 integer for entry count, followed of
|
|
|
|
|
a variable number of words describing the table. The easiest way to
|
|
|
|
|
generate a gamma table is to use the following function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPGAMMATABLE cmsBuildGamma(int nEntries, double Gamma);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Allocates an fill a table describing generic gamma.
|
|
|
|
|
|
|
|
|
|
You must specify the number of entries your table will consist of,
|
|
|
|
|
and the float value for gamma.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPGAMMATABLE cmsBuildParametricGamma(int nEntries, int Type, double Params[]);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Does build a parametric curve based on parameters.
|
|
|
|
|
|
|
|
|
|
Params[] does contain Gamma, a, b, c, d, e, f
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Type 1 :
|
|
|
|
|
X = Y ^ Gamma | Gamma = Params[0]
|
|
|
|
|
|
|
|
|
|
Type 2 :
|
|
|
|
|
CIE 122-1966
|
|
|
|
|
Y = (aX + b)^Gamma | X >= -b/a
|
|
|
|
|
Y = 0 | else
|
|
|
|
|
Type 3:
|
|
|
|
|
|
|
|
|
|
IEC 61966-3
|
|
|
|
|
Y = (aX + b)^Gamma | X <= -b/a
|
|
|
|
|
Y = c | else
|
|
|
|
|
|
|
|
|
|
Type 4:
|
|
|
|
|
IEC 61966-2.1 (sRGB)
|
|
|
|
|
Y = (aX + b)^Gamma | X >= d
|
|
|
|
|
Y = cX | X < d
|
|
|
|
|
|
|
|
|
|
Type 5:
|
|
|
|
|
|
|
|
|
|
Y = (aX + b)^Gamma + e | X <= d
|
|
|
|
|
Y = cX + f | else
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Giving negative values for Type does result in reversed curve.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPGAMMATABLE cmsAllocGamma(int nEntries);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Allocates space for a gamma table, memory is unitialized.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsFreeGamma(LPGAMMATABLE Gamma);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Frees a gamma table
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPGAMMATABLE cmsReverseGamma(int nResultSamples, LPGAMMATABLE InGamma);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Reverses a gamma table resampling it in a new table.
|
|
|
|
|
|
|
|
|
|
This function reverses the gamma table if it can be done. lcms does not
|
|
|
|
|
detect whatever a non-monotonic function is given, so wrong input can
|
|
|
|
|
result in ugly results: not to be a problem since "normal" gamma curves
|
|
|
|
|
are not collapsing inputs at same output value. The new curve will be
|
|
|
|
|
resampled to nResultSamples entries.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPGAMMATABLE cmsJoinGamma(LPGAMMATABLE InGamma, LPGAMMATABLE OutGamma);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Obtains a table joining two tables, one as input and other as
|
|
|
|
|
output. Output table is reversed and then composited with input gamma.
|
|
|
|
|
|
|
|
|
|
This will let you to "refine" the generic gamma for monitors (2.1 or 2.2
|
|
|
|
|
are usual values) to match viewing conditions of more or less background
|
|
|
|
|
light. Note that this function uses TABULATED functions, so very exotic
|
|
|
|
|
curves can be obtained by combining transfer functions with reversed
|
|
|
|
|
gamma curves. Normally there is no need of worry about such gamma
|
|
|
|
|
manipulations, but the functionality is here if you wish to use.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsSmoothGamma(LPGAMMATABLE Tab, double lambda);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does smooth the curve contained into Tab. Smooth curves does work better
|
|
|
|
|
and more pleasant to eye.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Tab: Table to be smoothed
|
|
|
|
|
lambda: The smoothing factor. 0..500 is the working range.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
TRUE on success. FALSE on error
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
double cmsEstimateGamma(LPGAMMATABLE t);
|
|
|
|
|
double cmsEstimateGammaEx(LPWORD Table, int nEntries, double Thereshold);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns a numerical estimation of the apparent gamma on the given table.
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPGAMMATABLE cmsReadICCGamma(cmsHPROFILE hProfile, icTagSignature sig);
|
|
|
|
|
LPGAMMATABLE cmsReadICCGammaReversed(cmsHPROFILE hProfile, icTagSignature sig);
|
|
|
|
|
int cmsReadICCText(cmsHPROFILE hProfile, icTagSignature sig, char *Text);
|
|
|
|
|
int cmsReadICCTextEx(cmsHPROFILE hProfile, icTagSignature sig, char *Text, size_t size);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPcmsSEQ cmsReadProfileSequenceDescription(cmsHPROFILE hProfile);
|
|
|
|
|
void cmsFreeProfileSequenceDescription(LPcmsSEQ pseq);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Reads and free profile sequence description structure
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetUserFormatters(cmsHTRANSFORM hTransform, DWORD dwInput, cmsFORMATTER Input,
|
|
|
|
|
DWORD dwOutput, cmsFORMATTER Output);
|
|
|
|
|
|
|
|
|
|
void cmsGetUserFormatters(cmsHTRANSFORM hTransform,
|
|
|
|
|
LPDWORD InputFormat, cmsFORMATTER* Input,
|
|
|
|
|
LPDWORD OutputFormat, cmsFORMATTER* Output);
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
7 - Error handling
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsErrorAction(int nAction)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Tells lcms how to react if an error is raised.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
nAction: can be one of these:
|
|
|
|
|
|
|
|
|
|
LCMS_ERROR_ABORT Aborts whole application
|
|
|
|
|
LCMS_ERROR_SHOW Displays a message, but does not abort application
|
|
|
|
|
LCMS_ERROR_IGNORE Does not show any message, however, operation is aborted.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSignalError(int ErrorCode, const char *ErrorText, ...)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This is the default error handler. If you are using lcms as a
|
|
|
|
|
static library, you can replace it by one of your own.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
ErrorCode: a number for coding error (with not meaning by now)
|
|
|
|
|
ErrorText: a format specifier describing the error
|
|
|
|
|
... : additional parameters needed by ErrorText, in a printf like fashion.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetErrorHandler(cmsErrorHandlerFunction Fn);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function sets an user-defined error handler. The error handler must be
|
|
|
|
|
defined as:
|
|
|
|
|
|
|
|
|
|
int ErrorHandlerFunction(int ErrorCode, const char *ErrorText);
|
|
|
|
|
|
|
|
|
|
ErrorCode can be one of the following values:
|
|
|
|
|
|
|
|
|
|
LCMS_ERRC_WARNING 0x1000
|
|
|
|
|
LCMS_ERRC_RECOVERABLE 0x2000
|
|
|
|
|
LCMS_ERRC_ABORTED 0x3000
|
|
|
|
|
|
|
|
|
|
ErrorText is a text holding an english description of error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
8 - Conversion functions
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
These functions can be used to convert from several colorimetric spaces
|
|
|
|
|
and to/from fixed encoding in spaces XYZ and Lab used by profiles.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSAPI void LCMSEXPORT cmsXYZ2xyY(LPcmsCIExyY Dest,
|
|
|
|
|
CONST LPcmsCIEXYZ Source);
|
|
|
|
|
LCMSAPI void LCMSEXPORT cmsxyY2XYZ(LPcmsCIEXYZ Dest,
|
|
|
|
|
CONST LPcmsCIExyY Source);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Does convert form/to XYZ Color Space to xyY color space
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Dest, Source: points to vectors to convert
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsXYZ2Lab(LPcmsCIEXYZ WhitePoint, LPcmsCIELab Lab, const LPcmsCIEXYZ xyz);
|
|
|
|
|
void cmsLab2XYZ(LPcmsCIEXYZ WhitePoint, LPcmsCIEXYZ xyz, const LPcmsCIELab Lab);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does convert from/to XYZ Color Space to CIE L a* b* Color Space
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
xyz, Lab : Pointers to values
|
|
|
|
|
WhitePoint: Pointer to media white. If NULL, the D50 is assumed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsLabEncoded2Float(LPcmsCIELab Lab, const WORD wLab[3]);
|
|
|
|
|
void cmsFloat2LabEncoded(WORD wLab[3], const LPcmsCIELab Lab);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does convert form/to the encoded notation of Lab pcs to floating point.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
wLab, Lab : Pointers to values
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsXYZEncoded2Float(LPcmsCIEXYZ fxyz, const WORD XYZ[3]);
|
|
|
|
|
void cmsFloat2XYZEncoded(WORD XYZ[3], const LPcmsCIEXYZ fXYZ);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does convert form/to the encoded notation of XYZ pcs to floating point.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
fxyz, XYZ : Pointers to values
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsLab2LCh(LPcmsCIELCh LCh, const LPcmsCIELab Lab);
|
|
|
|
|
void cmsLCh2Lab(LPcmsCIELab Lab, const LPcmsCIELCh LCh);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does convert between polar/rectangulat form of CIE L*a*b*
|
|
|
|
|
|
|
|
|
|
L = L
|
|
|
|
|
C = sqrt(a*a+b*b)
|
|
|
|
|
h = atan(b/a)
|
|
|
|
|
|
|
|
|
|
Where C=colorfulness and h=hue.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
Lab, LCh : Pointers to values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
double cmsDeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Computes the dE between two Lab values. The formula is
|
|
|
|
|
|
|
|
|
|
dE = sqrt (dL^2 + da^2 + db^2)
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
Lab1, Lab2: Points to the Lab values.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
The dE. If any Lab is negative, or with L>100 it returns 65535.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
double cmsCIE94DeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2);
|
|
|
|
|
double cmsBFDdeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2);
|
|
|
|
|
double cmsCMCdeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2);
|
|
|
|
|
double cmsCIE2000DeltaE(LPcmsCIELab Lab1, LPcmsCIELab Lab2, double Kl, double Kc, double Kh);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Several additional error measurement systems.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsClampLab(LPcmsCIELab Lab, double amax, double amin, double bmax, double bmin);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Clamps carefully a Lab value, keeping hue constant.
|
|
|
|
|
|
|
|
|
|
L is unchanged and not used. The gamut boundaries are given
|
|
|
|
|
by the rectangle (amin, bmin) - (amax, bmax)
|
|
|
|
|
|
|
|
|
|
if Lab value is inside gamut, this function don't touch anything, if outside,
|
|
|
|
|
converts to LCh, and keeping h constant, reduce C until inside gamut.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSAPI icColorSpaceSignature LCMSEXPORT _cmsICCcolorSpace(int OurNotation);
|
|
|
|
|
LCMSAPI int LCMSEXPORT _cmsLCMScolorSpace(icColorSpaceSignature ProfileSpace);
|
|
|
|
|
LCMSAPI int LCMSEXPORT _cmsChannelsOf(icColorSpaceSignature ColorSpace);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
9 - CIECAM97s/CIECAM02
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The model input data are the adapting field luminance in cd/m2
|
|
|
|
|
(normally taken to be 20% of the luminance of white in the adapting field),
|
|
|
|
|
La , the relative tristimulus values of the stimulus, XYZ, the relative
|
|
|
|
|
tristimulus values of white in the same viewing conditions, "whitePoint",
|
|
|
|
|
and the relative luminance of the background, Yb . Relative tristimulus
|
|
|
|
|
values should be expressed on a scale from Y = 0 for a perfect black
|
|
|
|
|
to Y = 100 for a perfect reflecting diffuser.
|
|
|
|
|
|
|
|
|
|
All CIE tristimulus values are obtained using the CIE 1931 Standard
|
|
|
|
|
Colorimetric Observer (2<>).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
|
|
|
|
|
|
cmsCIEXYZ whitePoint; // The media white in XYZ
|
|
|
|
|
|
|
|
|
|
double Yb;
|
|
|
|
|
double La;
|
|
|
|
|
int surround;
|
|
|
|
|
double D_value;
|
|
|
|
|
|
|
|
|
|
} cmsViewingConditions, FAR* LPcmsViewingConditions;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
surround can be one of these
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define AVG_SURROUND 1
|
|
|
|
|
#define DIM_SURROUND 2
|
|
|
|
|
#define DARK_SURROUND 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
D_value (adaptation degree) is any value between 0 and 1, and additionally:
|
|
|
|
|
|
|
|
|
|
#define D_CALCULATE (-1) // Calculate D
|
|
|
|
|
#define D_CALCULATE_DISCOUNT (-2) // Calculate w/ partial discounting
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
HANDLE cmsCIECAM97sInit(LPcmsViewingConditions pVC)/cmsCIECAM02Init
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does init the model. It returns a handle for further reference
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
pVC: points to a cmsViewingConditions struct holding viewing condition
|
|
|
|
|
parameters
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A handle to a model instance, or NULL if error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsCIECAM97sDone(HANDLE hModel)/cmsCIECAM02Done
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Terminates a model
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hModel: A handle to the model instance to terminate.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsCIECAM97sForward(HANDLE hModel, LPcmsCIEXYZ pIn, LPcmsJCh pOut)/
|
|
|
|
|
cmsCIECAM02Forward
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Model forward. Transforms from XYZ to JCh.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hModel: A handle to the model instance
|
|
|
|
|
pIn, POut: Pointers to values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsCIECAM97sReverse(HANDLE hModel, LPcmsJCh pIn, LPcmsCIEXYZ pOut)/
|
|
|
|
|
cmsCIECAM02Reverse
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Model reverse. Transforms from JCh to XYZ.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hModel: A handle to the model instance
|
|
|
|
|
pIn, POut: Pointers to values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
10 - Profile creation functions
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetDeviceClass(cmsHPROFILE hProfile, icProfileClassSignature sig);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does set device class signature in profile header
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetColorSpace(cmsHPROFILE hProfile, icColorSpaceSignature sig);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does set colorspace signaure in profile header
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetPCS(cmsHPROFILE hProfile, icColorSpaceSignature pcs);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does set PCS signature in profile header
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetRenderingIntent(cmsHPROFILE hProfile, int RenderingIntent);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Sets the rendering intent in profile header
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetProfileID(cmsHPROFILE hProfile, LPBYTE ProfileID);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Sets the profile ID in profile header (ver 4 only)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetHeaderFlags(cmsSetHeaderFlags(cmsHPROFILE hProfile, DWORD Flags)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does set flags in profile header
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsSetHeaderAttributes(cmsSetHeaderFlags(cmsHPROFILE hProfile, DWORD Flags)
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does set attribute flags in profile header
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsAddTag(cmsHPROFILE hProfile, icTagSignature sig, void* data);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Adds a new tag to a profile. Supported tags are:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Signature Expected data type
|
|
|
|
|
================= ==================
|
|
|
|
|
|
|
|
|
|
icSigCharTargetTag const char*
|
|
|
|
|
icSigCopyrightTag const char*
|
|
|
|
|
icSigProfileDescriptionTag const char*
|
|
|
|
|
icSigDeviceMfgDescTag const char*
|
|
|
|
|
icSigDeviceModelDescTag const char*
|
|
|
|
|
icSigRedColorantTag LPcmsCIEXYZ
|
|
|
|
|
icSigGreenColorantTag LPcmsCIEXYZ
|
|
|
|
|
icSigBlueColorantTag LPcmsCIEXYZ
|
|
|
|
|
icSigMediaWhitePointTag LPcmsCIEXYZ
|
|
|
|
|
icSigMediaBlackPointTag LPcmsCIEXYZ
|
|
|
|
|
icSigRedTRCTag LPGAMMATABLE
|
|
|
|
|
icSigGreenTRCTag LPGAMMATABLE
|
|
|
|
|
icSigBlueTRCTag LPGAMMATABLE
|
|
|
|
|
icSigGrayTRCTag LPGAMMATABLE
|
|
|
|
|
icSigAToB0Tag LPLUT
|
|
|
|
|
icSigAToB1Tag LPLUT
|
|
|
|
|
icSigAToB2Tag LPLUT
|
|
|
|
|
icSigBToA0Tag LPLUT
|
|
|
|
|
icSigBToA1Tag LPLUT
|
|
|
|
|
icSigBToA2Tag LPLUT
|
|
|
|
|
icSigGamutTag LPLUT
|
|
|
|
|
icSigPreview0Tag LPLUT
|
|
|
|
|
icSigPreview1Tag LPLUT
|
|
|
|
|
icSigPreview2Tag LPLUT
|
|
|
|
|
icSigChromaticityTag LPcmsCIExyYTRIPLE
|
|
|
|
|
icSigNamedColor2Tag LPcmsNAMEDCOLORLIST
|
|
|
|
|
icSigColorantTableTag LPcmsNAMEDCOLORLIST
|
|
|
|
|
icSigColorantTableOutTag LPcmsNAMEDCOLORLIST
|
|
|
|
|
icSigCalibrationDateTimeTag const struct tm*
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
11 - LUT manipulation
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This is the pipeline LUT is implementing
|
|
|
|
|
|
|
|
|
|
[Mat] -> [L1] -> [Mat3] -> [Ofs3] -> [L3]
|
|
|
|
|
-> [CLUT] -> [L4] -> [Mat4] -> [Ofs4] -> [L2]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsAllocLUT(void);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does allocate an empty LUT. Input is passed transparently to output by default
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A handle to a new LUT, or NULL if error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsDupLUT(LPLUT Orig);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Duplicates a LUT.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A handle to a new LUT, or NULL if error.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsAllocLinearTable(LPLUT NewLUT, LPGAMMATABLE Tables[], int nTable);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does include a prelinearization tables set into a LUT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
NewLUT: The target LUT
|
|
|
|
|
Tables[]: A set of tables to be set
|
|
|
|
|
nTable: Identificates the position of tables in pipeline
|
|
|
|
|
|
|
|
|
|
1 - Prelinearization
|
|
|
|
|
2 - Postlinearization
|
|
|
|
|
3 - L3
|
|
|
|
|
4 - L4
|
|
|
|
|
|
|
|
|
|
Values 3 and 4 are reserved for v4 profiles
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsAlloc3DGrid(LPLUT Lut, int clutPoints, int inputChan, int outputChan);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Allocates an empty 3D CLUT table.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Lut: The target LUT
|
|
|
|
|
clutPoints: The points number of a side of the (hyper)cube
|
|
|
|
|
inputChan, outputChan: The channels count
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A handle to the LUT, or NULL if error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsFreeLUT(LPLUT Lut);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Free any used memory. After this call the LUT is not longer valid
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Lut: The target LUT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsEvalLUT(LPLUT Lut, WORD In[], WORD Out[]);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Evaluates a LUT, giving In[] values. Returns Out[] values.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Lut: The target LUT
|
|
|
|
|
In: Input Values
|
|
|
|
|
Out: Output Values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsSetMatrixLUT(LPLUT Lut, LPMAT3 M);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Provided for backwards compatibility sake. Sets the 'Mat' Matrix in the LUT pipeline
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsSetMatrixLUT4(LPLUT Lut, LPMAT3 M, LPVEC3 off, DWORD dwFlags);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Set a matrix in V4 style. Flags defines the location in the LUT pipeline:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LUT_HASMATRIX: Mat
|
|
|
|
|
LUT_HASMATRIX3: Mat3
|
|
|
|
|
LUT_HASMATRIX4: Mat4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LPLUT cmsReadICCLut(cmsHPROFILE hProfile, icTagSignature sig);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does retrive a LUT from a profile handle.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hProfile: a handle to a open profile
|
|
|
|
|
sig: The tag signature
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
A pointer to newly created LUT on success
|
|
|
|
|
NULL on error
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsSample3DGrid(LPLUT Lut,
|
|
|
|
|
_cmsSAMPLER Sampler,
|
|
|
|
|
LPVOID Cargo, DWORD dwFlags);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Builds the CLUT table by calling repeatly a supplied callback function
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef int (* _cmsSAMPLER)(register WORD In[],
|
|
|
|
|
register WORD Out[],
|
|
|
|
|
register LPVOID Cargo);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The programmer has to write a callback function. This function
|
|
|
|
|
should calculate Out values given a In[] set. For example, if we
|
|
|
|
|
want a LUT to invert channels, a sampler could be:
|
|
|
|
|
|
|
|
|
|
int InvertSampler(register WORD In[],
|
|
|
|
|
register WORD Out[],
|
|
|
|
|
register LPVOID Cargo)
|
|
|
|
|
{
|
|
|
|
|
for (i=0; i < 3; i++)
|
|
|
|
|
Out[i] = ~ In[i];
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsSample3DGrid does call this function to build the CLUT.
|
|
|
|
|
Pre/post linearization tables may be taken into account across
|
|
|
|
|
flags parameter
|
|
|
|
|
|
|
|
|
|
Flags Meaning
|
|
|
|
|
================ =======================================
|
|
|
|
|
LUT_HASTL1 Do reverse linear interpolation on
|
|
|
|
|
prelinearization table before calling
|
|
|
|
|
the callback.
|
|
|
|
|
|
|
|
|
|
LUT_HASTL2 Do reverse linear interpolation on
|
|
|
|
|
postlinearization table after calling
|
|
|
|
|
the callback.
|
|
|
|
|
|
|
|
|
|
Flags are intended as an aid for building non-uniformly spaced
|
|
|
|
|
CLUTs. Using flags results in "undoing" any linearization tables
|
|
|
|
|
could apply. In such way, the programmer is expected to have in
|
|
|
|
|
In[] always the original colorspace, and must return Out[] values
|
|
|
|
|
always in original (non-postlinearized) space as well.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The callback must return 0 if all is ok, or any other value
|
|
|
|
|
to indicate error. If error condition is raised, whole CLUT
|
|
|
|
|
construction is aborted.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Lut: a pointer to LUT structure
|
|
|
|
|
Sampler: The callback function
|
|
|
|
|
Cargo: A 32-bit value. Could be used as pointer to pass
|
|
|
|
|
parameters to callback.
|
|
|
|
|
|
|
|
|
|
dwFlags: any combination of LUT_HASTL1 or LUT_HASTL2
|
|
|
|
|
joined by bitwise-or operator '|'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
12 - Named color functions
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Named color profiles are a special kind of profiles handling lists of spot
|
|
|
|
|
colors. The typical example is PANTONE. CMM deals with named color profiles like
|
|
|
|
|
all other types, except they must be in input stage and the encoding supported
|
|
|
|
|
is limited to a one single channel of 16-bit indexes.
|
|
|
|
|
|
|
|
|
|
Let's assume we have a Named color profile holding only 4 colors:
|
|
|
|
|
|
|
|
|
|
<20> CYAN
|
|
|
|
|
<20> MAGENTA
|
|
|
|
|
<20> YELLOW
|
|
|
|
|
<20> BLACK
|
|
|
|
|
|
|
|
|
|
We create a transform using:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hTransform = cmsCreateColorTransform(hNamedColorProfile,
|
|
|
|
|
TYPE_NAMED_COLOR_INDEX,
|
|
|
|
|
hOutputProfile,
|
|
|
|
|
TYPE_BGR_8,
|
|
|
|
|
INTENT_PERCEPTUAL, 0);
|
|
|
|
|
|
|
|
|
|
"TYPE_NAMED_COLOR_INDEX" is a special encoding for these profiles, it
|
|
|
|
|
represents a single channel holding the spot color index. In our case
|
|
|
|
|
value 0 will be "CYAN", value 1 "MAGENTA" and so one.
|
|
|
|
|
|
|
|
|
|
For converting between string and index there is an auxiliary function:
|
|
|
|
|
|
|
|
|
|
int cmsNamedColorIndex(cmsHTRANSFORM hTransform, const char* ColorName);
|
|
|
|
|
|
|
|
|
|
That will perform a look up on the spot colors database and return the color
|
|
|
|
|
number or -1 if the color was not found. Other additional functions for named
|
|
|
|
|
color transforms are:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int cmsNamedColorCount(cmsHTRANSFORM hTransform);
|
|
|
|
|
|
|
|
|
|
That returns the number of colors present on transform database.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int cmsNamedColorInfo(cmsHTRANSFORM hTransform,
|
|
|
|
|
int nColor, LPNAMEDCOLORINFO Info);
|
|
|
|
|
|
|
|
|
|
That returns extended information about a given color. Named color profiles
|
|
|
|
|
can also be grouped by using multiprofile transforms. In such case, the database
|
|
|
|
|
will be formed by the union of all colors in all named color profiles present in
|
|
|
|
|
transform.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Named color profiles does hold two coordinates for each color, let's
|
|
|
|
|
take our PANTONE example. This profile would contain for each color
|
|
|
|
|
the CMYK colorants plus its PCS coordinates, usually in Lab space.
|
|
|
|
|
|
|
|
|
|
lcms can work with named color using both coordinates. Creating a
|
|
|
|
|
transform with two profiles, if the input one is a named color, then you
|
|
|
|
|
obtain the translated color using PCS.
|
|
|
|
|
|
|
|
|
|
Example, named color -> sRGB will give the color patches in sRGB
|
|
|
|
|
|
|
|
|
|
In the other hand, setting second profile to NULL, returns the device
|
|
|
|
|
coordinates, that is, CMYK colorants in our PANTONE sample.
|
|
|
|
|
|
|
|
|
|
Example: Named color -> NULL will give the CMYK amount for each spot color.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The transform must use TYPE_NAMED_COLOR_INDEX on input. That is, a single
|
|
|
|
|
channel containing the 0-based color index.
|
|
|
|
|
|
|
|
|
|
Then you have:
|
|
|
|
|
|
|
|
|
|
cmsNamedColorIndex(cmsHTRANSFORM xform, const char* Name)
|
|
|
|
|
|
|
|
|
|
for obtaining index from color name, and
|
|
|
|
|
|
|
|
|
|
cmsNamedColorInfo(), cmsNamedColorCount() to retrieve the list.
|
|
|
|
|
|
|
|
|
|
The profile is supposed to be for a unique device. Then the CMYK
|
|
|
|
|
values does represent the amount of inks THIS PRINTER needs to render
|
|
|
|
|
the spot color. The profile also has the Lab values corresponding to
|
|
|
|
|
the color. This really would have no sense if gamut of printer were
|
|
|
|
|
infinite, but since printers does have a limited gamut a PANTONE-certified
|
|
|
|
|
printer renders colors near gamut boundaries with some limitations.
|
|
|
|
|
The named color profile is somehow explaining which are these limitation
|
|
|
|
|
for that printer.
|
|
|
|
|
|
|
|
|
|
So, you can use a named color profile in two different ways, as output,
|
|
|
|
|
giving the index and getting the CMYK values or as input and getting the
|
|
|
|
|
Lab for that color.
|
|
|
|
|
|
|
|
|
|
A transform named color -> NULL will give the CMYK values for the spot
|
|
|
|
|
color on the printer the profile is describing. This would be the normal usage.
|
|
|
|
|
|
|
|
|
|
A transform Named color -> another printer will give on the output printer
|
|
|
|
|
the spot colors as if they were printed in the printer named color profile
|
|
|
|
|
is describing. This is useful for soft proofing.
|
|
|
|
|
|
|
|
|
|
As an additional feature, lcms can "group" several named color profiles
|
|
|
|
|
into a single database by means of cmsCreateMultiprofileTransform().
|
|
|
|
|
Such case works as described above, but joining all named colors as they
|
|
|
|
|
were in a single profile.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
13. PostScript generation
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
3 functions carry the task of obtaining CRD and CSA.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DWORD cmsGetPostScriptCSA(cmsHPROFILE hProfile, int Intent, LPVOID Buffer, DWORD dwBufferLen);
|
|
|
|
|
DWORD cmsGetPostScriptCRD(cmsHPROFILE hProfile, int Intent, LPVOID Buffer, DWORD dwBufferLen);
|
|
|
|
|
DWORD cmsGetPostScriptCRDEx(cmsHPROFILE hProfile, int Intent, DWORD dwFlags, LPVOID Buffer, DWORD dwBufferLen);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmsGetPostScriptCRDEx allows black point compensation using
|
|
|
|
|
cmsFLAGS_BLACKPOINTCOMPENSATION in flags field.
|
|
|
|
|
|
|
|
|
|
PostScrip colorflow is often done in a different way. Insted of creating a
|
|
|
|
|
transform, it is sometimes desirable to delegate the color management to
|
|
|
|
|
PostScript interpreter. These functions does translate input and output
|
|
|
|
|
profiles into Color Space Arrays (CSA) and Color Rendering Dictionaries (CRD)
|
|
|
|
|
|
|
|
|
|
<20> CRD are equivalent to output (printer) profiles. Can be
|
|
|
|
|
loaded into printer at startup and can be stored as resources.
|
|
|
|
|
|
|
|
|
|
<20> CSA are equivalent to input and workspace profiles, and are
|
|
|
|
|
intended to be included in the document definition.
|
|
|
|
|
|
|
|
|
|
These functions does generate the PostScript equivalents. Since the lenght of
|
|
|
|
|
the resultant PostScript code is unknown in advance, you can call the
|
|
|
|
|
functions with len=0 and Buffer=NULL to get the lenght. After that, you need
|
|
|
|
|
to allocate enough memory to contain the whole block
|
|
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
|
|
Size = cmsGetPostScriptCSA(hProfile, INTENT_PERCEPTUAL, NULL, 0);
|
|
|
|
|
If (Size == 0) error()
|
|
|
|
|
|
|
|
|
|
Block = malloc(Size);
|
|
|
|
|
cmsGetPostScriptCSA(hProfile, INTENT_PERCEPTUAL, Block, Size);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Devicelink profiles are supported, as long as input colorspace matches
|
|
|
|
|
Lab/XYZ for CSA or output colorspace matches Lab/XYZ for CRD. This can
|
|
|
|
|
be used in conjuntion with cmsCreateMultiprofileTransform(),
|
|
|
|
|
and cmsTransform2DeviceLink() to embed complex color flow into PostScript.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WARNING: Preccision of PostScript is limited to 8 bits per sample. If you
|
|
|
|
|
can choose between normal transforms and CSA/CRD, normal transforms will
|
|
|
|
|
give more accurancy. However, there are situations where there is no
|
|
|
|
|
chance.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
14 - CGATS.13 - 200
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This standard defines an exchange format for spectral measurement data,
|
|
|
|
|
colorimetric data, and densitometric data in electronic form using
|
|
|
|
|
keywords and data tables. It maintains human readability of the data as
|
|
|
|
|
well as enabling machine readability. It includes a series of predefined
|
|
|
|
|
keywords and data format identifiers and makes provision for the dynamic
|
|
|
|
|
definition of additional keywords and data format identifiers as
|
|
|
|
|
necessary.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It was prepared by CGATS/SC3 in an effort to consolidate the common format
|
|
|
|
|
requirements for the exchange of spectral measurement data, colorimetric
|
|
|
|
|
data, and densitometric data in electronic form.
|
|
|
|
|
|
|
|
|
|
These requirements presently appear in a number of CGATS and IT8 standards
|
|
|
|
|
such as CGAT S.5, IT8.7/1, IT8.7/2, and IT8.7/3. While it is the intent that
|
|
|
|
|
each of these individual standards will continue to identify required data,
|
|
|
|
|
the basic data format and keywords and data identifier s will be defined in
|
|
|
|
|
this standard for consistent use across all applicable standards.
|
|
|
|
|
|
|
|
|
|
The Committee for Graphic Arts Technologies Standards (CGATS) was accredited
|
|
|
|
|
by the American National Standards Institute in 1989 to serve as the
|
|
|
|
|
coordinator of graphic arts standards activities.
|
|
|
|
|
|
|
|
|
|
CGATS recommends the adoption and use of this standard by the graphic
|
|
|
|
|
arts industry and its suppliers at their earliest convenience.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lcms parser has following additions:
|
|
|
|
|
|
|
|
|
|
.INCLUDE directive
|
|
|
|
|
------------------
|
|
|
|
|
|
|
|
|
|
Works like #include in C language.
|
|
|
|
|
|
|
|
|
|
LABEL special keyword
|
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSHANDLE cmsIT8Alloc(void);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does allocate an empty CGATS.13/IT8 object. Mostly used for creating new IT8 files
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A handle to a CGATS.13, or NULL if error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
void cmsIT8Free(LCMSHANDLE hIT8);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Free any used memory. After this call the IT8 parser is not longer valid
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Tables
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
In the lcms implementation, a CGATS.13/IT8 object may contain any number of
|
|
|
|
|
tables. Tables are separated by END_DATA keyword.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsIT8TableCount(LCMSHANDLE hIT8);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns the number of tables the CGATS.13/IT8 object contains.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsIT8SetTable(LCMSHANDLE hIT8, int nTable);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Sets the current table on a given CGATS.13/IT8 object
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
nTable: The table number (0 based)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
the number of tables the CGATS.13/IT8 object contains.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Comments:
|
|
|
|
|
|
|
|
|
|
Setting nTable to TableCount + 1 does allocate a new empty table
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Persistence
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
These are functions to load/save CGATS.13/IT8 objects from file and memory stream.
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSHANDLE cmsIT8LoadFromFile(const char* cFileName);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Does allocate an CGATS.13/IT8 object and fills it with the contents of cFileName.
|
|
|
|
|
Mostly used for reading existing IT8 files.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
cFileName: The IT8/CGATS.13 file name to read/parse
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A handle to a CGATS.13, or NULL if error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSHANDLE cmsIT8LoadFromMem(void *Ptr, size_t len);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Same as anterior, but the IT8/CGATS.13 stream is readed from a memory block.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
Ptr: Points to a block of contiguous memory containing the IT8/CGATS.13 stream.
|
|
|
|
|
len: IT8/CGATS.13 stream s size measured in bytes.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
NULL on error, a profile handle on success.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SaveToFile(LCMSHANDLE hIT8, const char* cFileName);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Saves a IT8/CGATS.13 object to a file.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SaveToMem(LCMSHANDLE hIT8, void *MemPtr, size_t* BytesNeeded);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Saves a IT8/CGATS.13 object to a memory stream.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Type and comments
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
The sheet type is a identifier placed on the very first line of the IT8/CGATS.13
|
|
|
|
|
stream. It can be IT8.7/xx or whatever.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsIT8GetSheetType(LCMSHANDLE hIT8);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetSheetType(LCMSHANDLE hIT8, const char* Type);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetComment(LCMSHANDLE hIT8, const char* cComment);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
This function is intended to provide a way automated IT8 creators can embed comments
|
|
|
|
|
into file. Comments have no effect, and its only purpose is to document any of the
|
|
|
|
|
file meaning.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Properties
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Properties are pairs <identifier> <value>. Each table may contain any number of
|
|
|
|
|
properties. Its primary purpose is store simpler settings.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetPropertyStr(LCMSHANDLE hIT8, const char* cProp, const char *Str);
|
|
|
|
|
LCMSBOOL cmsIT8SetPropertyDbl(LCMSHANDLE hIT8, const char* cProp, double Val);
|
|
|
|
|
LCMSBOOL cmsIT8SetPropertyHex(LCMSHANDLE hIT8, const char* cProp, int Val);
|
|
|
|
|
LCMSBOOL cmsIT8SetPropertyUncooked(LCMSHANDLE hIT8, const char* Key, const char* Buffer);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsIT8GetProperty(LCMSHANDLE hIT8, const char* cProp);
|
|
|
|
|
double cmsIT8GetPropertyDbl(LCMSHANDLE hIT8, const char* cProp);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsIT8EnumProperties(LCMSHANDLE IT8, char ***PropertyNames);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
PropertyNames: A pointer to a variable which would recive a pointer to an
|
|
|
|
|
array of property name strings.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Datasets
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsIT8GetDataRowCol(LCMSHANDLE IT8, int row, int col);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
double cmsIT8GetDataRowColDbl(LCMSHANDLE IT8, int row, int col);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetDataRowCol(LCMSHANDLE hIT8, int row, int col,
|
|
|
|
|
const char* Val);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetDataRowColDbl(LCMSHANDLE hIT8, int row, int col,
|
|
|
|
|
double Val);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsIT8GetData(LCMSHANDLE IT8, const char* cPatch,
|
|
|
|
|
const char* cSample);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
double cmsIT8GetDataDbl(LCMSHANDLE IT8, const char* cPatch,
|
|
|
|
|
const char* cSample);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetData(LCMSHANDLE IT8, const char* cPatch,
|
|
|
|
|
const char* cSample,
|
|
|
|
|
char *Val);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetDataDbl(LCMSHANDLE hIT8, const char* cPatch,
|
|
|
|
|
const char* cSample,
|
|
|
|
|
double Val);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
LCMSBOOL cmsIT8SetDataFormat(LCMSHANDLE IT8, int n, const char *Sample);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
int cmsIT8EnumDataFormat(LCMSHANDLE IT8, char ***SampleNames);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Returns an array with pointers to the column names of currect table.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
SampleNames: A pointer to a variable of type char** which will hold the table.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
The number of column names in table.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
const char* cmsIT8GetPatchName(LCMSHANDLE hIT8, int nPatch, char* buffer);
|
|
|
|
|
_________________________________________________________________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Fills buffer with the contents of SAMPLE_ID column for the set given in nPatch.
|
|
|
|
|
That usually corresponds to patch name.
|
|
|
|
|
|
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
|
|
hIT8: The CGATS.13 parser handle
|
|
|
|
|
nPatch : patch number to retreive name
|
|
|
|
|
buffer: A memory buffer to recivepatch name, or NULL to allow function to
|
|
|
|
|
allocate it own buffer.
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
|
|
A pointer to the patch name, either the user-supplied buffer or an internal
|
|
|
|
|
memory block.
|
|
|
|
|
|