Blame html/man/TIFFcolor.3tiff.html

Packit 994f1a
Packit 994f1a
Packit 994f1a
<html>
Packit 994f1a
<head>
Packit 994f1a
<meta name="generator" content="groff -Thtml, see www.gnu.org">
Packit 994f1a
<meta name="Content-Style" content="text/css">
Packit 994f1a
<title>COLOR</title>
Packit 994f1a
</head>
Packit 994f1a
<body>
Packit 994f1a
Packit 994f1a

COLOR

Packit 994f1a
NAME
Packit 994f1a
SYNOPSIS
Packit 994f1a
DESCRIPTION
Packit 994f1a
SEE ALSO
Packit 994f1a
Packit 994f1a

Packit 994f1a
Packit 994f1a

NAME

Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFYCbCrToRGBInit, TIFFYCbCrtoRGB, TIFFCIELabToRGBInit,

Packit 994f1a
TIFFCIELabToXYZ, TIFFXYZToRGB − color conversion
Packit 994f1a
routines.

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

SYNOPSIS

Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

#include <tiffio.h>

Packit 994f1a
Packit 994f1a

int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB

Packit 994f1a
*ycbcr, float *luma, float
Packit 994f1a
*refBlackWhite");"
Packit 994f1a
void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *ycbcr,
Packit 994f1a
uint32 Y, int32 Cb, int32
Packit 994f1a
Cr, uint32 *R, uint32
Packit 994f1a
*G, uint32 *B );

Packit 994f1a
Packit 994f1a

int TIFFCIELabToRGBInit(TIFFCIELabToRGB

Packit 994f1a
*cielab, TIFFDisplay *display,
Packit 994f1a
float *refWhite);
Packit 994f1a
void TIFFCIELabToXYZ(TIFFCIELabToRGB *cielab,
Packit 994f1a
uint32 L, int32 a, int32
Packit 994f1a
b, float *X, float *Y,
Packit 994f1a
float *Z);
Packit 994f1a
void TIFFXYZToRGB(TIFFCIELabToRGB *cielab,
Packit 994f1a
float X, float Y, float
Packit 994f1a
Z",uint32*"R,
Packit 994f1a
uint32 *G, uint32 *B);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

DESCRIPTION

Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFF supports several color spaces for images stored in

Packit 994f1a
that format. There is usually a problem of application to
Packit 994f1a
handle the data properly and convert between different
Packit 994f1a
colorspaces for displaying and printing purposes. To
Packit 994f1a
simplify this task libtiff implements several color
Packit 994f1a
conversion routines itself. In particular, these routines
Packit 994f1a
used in TIFFRGBAImage(3TIFF) interface.

Packit 994f1a
Packit 994f1a

TIFFYCbCrToRGBInit() used to initialize

Packit 994f1a
YCbCr to RGB conversion state. Allocating and
Packit 994f1a
freeing of the ycbcr structure belongs to programmer.
Packit 994f1a
TIFFYCbCrToRGB defined in tiffio.h as

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
typedef struct {                /* YCbCr->RGB support */
Packit 994f1a
        TIFFRGBValue* clamptab; /* range clamping table */
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="5" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a

int*

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Cr_r_tab;

Packit 994f1a
int*

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Cb_b_tab;

Packit 994f1a
int32*

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Cr_g_tab;

Packit 994f1a
int32*

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Cb_g_tab;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

int32* Y_tab;

Packit 994f1a
} TIFFYCbCrToRGB;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

luma is a float array of three values representing

Packit 994f1a
proportions of the red, green and blue in luminance, Y (see
Packit 994f1a
section 21 of the TIFF 6.0 specification, where the YCbCr
Packit 994f1a
images discussed). TIFFTAG_YCBCRCOEFFICIENTS holds
Packit 994f1a
that values in TIFF file. refBlackWhite is a float
Packit 994f1a
array of 6 values which specifies a pair of headroom and
Packit 994f1a
footroom image data values (codes) for each image component
Packit 994f1a
(see section 20 of the TIFF 6.0 specification where the
Packit 994f1a
colorinmetry fields discussed).
Packit 994f1a
TIFFTAG_REFERENCEBLACKWHITE is responsible for
Packit 994f1a
storing these values in TIFF file. Following code snippet
Packit 994f1a
should helps to understand the the technique:

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
float *luma, *refBlackWhite;
Packit 994f1a
uint16 hs, vs;
Packit 994f1a
Packit 994f1a
/* Initialize structures */
Packit 994f1a
ycbcr = (TIFFYCbCrToRGB*)
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

_TIFFmalloc(TIFFroundup(sizeof(TIFFYCbCrToRGB),

Packit 994f1a
sizeof(long))

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

+ 4*256*sizeof(TIFFRGBValue)

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

+ 2*256*sizeof(int)

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

+ 3*256*sizeof(int32));

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

if (ycbcr == NULL) {

Packit 994f1a
TIFFError("YCbCr->RGB",

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="4" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

"No space for YCbCr->RGB conversion

Packit 994f1a
state");

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

exit(0);

Packit 994f1a
}

Packit 994f1a
Packit 994f1a

TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRCOEFFICIENTS,

Packit 994f1a
&luma);
Packit 994f1a
TIFFGetFieldDefaulted(tif, TIFFTAG_REFERENCEBLACKWHITE,
Packit 994f1a
&refBlackWhite);
Packit 994f1a
if (TIFFYCbCrToRGBInit(ycbcr, luma, refBlackWhite) <
Packit 994f1a
0)

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

exit(0);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/* Start conversion */

Packit 994f1a
uint32 r, g, b;
Packit 994f1a
uint32 Y;
Packit 994f1a
int32 Cb, Cr;

Packit 994f1a
Packit 994f1a

for each pixel in image

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFYCbCrtoRGB(img->ycbcr, Y, Cb, Cr, &r, &g,

Packit 994f1a
&b);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/* Free state structure */

Packit 994f1a
_TIFFfree(ycbcr);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFCIELabToRGBInit() initializes the CIE

Packit 994f1a
L*a*b* 1976 to RGB conversion state.
Packit 994f1a
TIFFCIELabToRGB defined as

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
#define CIELABTORGB_TABLE_RANGE 1500
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="9" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

typedef struct {

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/* CIE Lab 1976->RGB support */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

int

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

range;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/* Size of conversion table */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

rstep, gstep, bstep;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

X0, Y0, Z0;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/* Reference white point */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFDisplay display;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr

Packit 994f1a
to r */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg

Packit 994f1a
to g */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb

Packit 994f1a
to b */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

} TIFFCIELabToRGB;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

display is a display device description, declared

Packit 994f1a
as

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
typedef struct {
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_mat[3][3]; /* XYZ -> luminance matrix */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_YCR; /* Light o/p for reference white */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_YCG;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_YCB;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

uint32 d_Vrwr; /* Pixel values for ref. white */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

uint32 d_Vrwg;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

uint32 d_Vrwb;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_Y0R; /* Residual light for black pixel */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_Y0G;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_Y0B;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_gammaR; /* Gamma values for the three guns

Packit 994f1a
*/

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_gammaG;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

float d_gammaB;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

} TIFFDisplay;

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

For example, the one can use sRGB device, which has the

Packit 994f1a
following parameters:

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
TIFFDisplay display_sRGB = {
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="5" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

{ /* XYZ -> luminance matrix */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

{ 3.2410F, -1.5374F, -0.4986F },

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

{ -0.9692F, 1.8760F, 0.0416F },

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

{ 0.0556F, -0.2040F, 1.0570F }

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

},

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

100.0F, 100.0F, 100.0F, /* Light o/p for reference white

Packit 994f1a
*/

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

255, 255, 255, /* Pixel values for ref. white */

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

1.0F, 1.0F, 1.0F, /* Residual light o/p for black pixel

Packit 994f1a
*/

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

2.4F, 2.4F, 2.4F, /* Gamma values for the three guns

Packit 994f1a
*/

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

};

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

refWhite is a color temperature of the reference

Packit 994f1a
white. The TIFFTAG_WHITEPOINT contains the
Packit 994f1a
chromaticity of the white point of the image from where the
Packit 994f1a
reference white can be calculated using following
Packit 994f1a
formulae:

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

refWhite_Y = 100.0

Packit 994f1a
refWhite_X = whitePoint_x / whitePoint_y * refWhite_Y
Packit 994f1a
refWhite_Z = (1.0 - whitePoint_x - whitePoint_y) /
Packit 994f1a
whitePoint_y * refWhite_X

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

The conversion itself performed in two steps: at the

Packit 994f1a
first one we will convert CIE L*a*b* 1976 to CIE
Packit 994f1a
XYZ using TIFFCIELabToXYZ() routine, and at the
Packit 994f1a
second step we will convert CIE XYZ to RGB
Packit 994f1a
using TIFFXYZToRGB(). Look at the code sample
Packit 994f1a
below:

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
float   *whitePoint;
Packit 994f1a
float   refWhite[3];
Packit 994f1a
Packit 994f1a
/* Initialize structures */
Packit 994f1a
img->cielab = (TIFFCIELabToRGB *)
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

_TIFFmalloc(sizeof(TIFFCIELabToRGB));

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

if (!cielab) {

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="5" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFError("CIE L*a*b*->RGB",

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

"No space for CIE L*a*b*->RGB conversion

Packit 994f1a
state.");

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

exit(0);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

}

Packit 994f1a
Packit 994f1a

TIFFGetFieldDefaulted(tif, TIFFTAG_WHITEPOINT,

Packit 994f1a
&whitePoint);
Packit 994f1a
refWhite[1] = 100.0F;
Packit 994f1a
refWhite[0] = whitePoint[0] / whitePoint[1] *
Packit 994f1a
refWhite[1];
Packit 994f1a
refWhite[2] = (1.0F - whitePoint[0] -
Packit 994f1a
whitePoint[1])

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/ whitePoint[1] * refWhite[1];

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

if (TIFFCIELabToRGBInit(cielab, &display_sRGB,

Packit 994f1a
refWhite) < 0) {

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="5" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFError("CIE L*a*b*->RGB",

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

"Failed to initialize CIE L*a*b*->RGB conversion

Packit 994f1a
state.");

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

_TIFFfree(cielab);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

exit(0);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

}

Packit 994f1a
Packit 994f1a

/* Now we can start to convert */

Packit 994f1a
uint32 r, g, b;
Packit 994f1a
uint32 L;
Packit 994f1a
int32 a, b;
Packit 994f1a
float X, Y, Z;

Packit 994f1a
Packit 994f1a

for each pixel in image

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFCIELabToXYZ(cielab, L, a, b, &X, &Y,

Packit 994f1a
&Z);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFXYZToRGB(cielab, X, Y, Z, &r, &g,

Packit 994f1a
&b);

Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

/* Don’t forget to free the state structure */

Packit 994f1a
_TIFFfree(cielab);

Packit 994f1a
Packit 994f1a
Packit 994f1a

SEE ALSO

Packit 994f1a
Packit 994f1a
Packit 994f1a
       cols="2" cellspacing="0" cellpadding="0">
Packit 994f1a
Packit 994f1a
Packit 994f1a
Packit 994f1a

TIFFRGBAImage(3TIFF) libtiff(3TIFF),

Packit 994f1a
Packit 994f1a

Libtiff library home page:

Packit 994f1a
http://www.remotesensing.org/libtiff/

Packit 994f1a
Packit 994f1a
Packit 994f1a

Packit 994f1a
</body>
Packit 994f1a
</html>