Blame html/man/TIFFcolor.3tiff.html

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

COLOR

Packit Service 2594b8
NAME
Packit Service 2594b8
SYNOPSIS
Packit Service 2594b8
DESCRIPTION
Packit Service 2594b8
SEE ALSO
Packit Service 2594b8
Packit Service 2594b8

Packit Service 2594b8
Packit Service 2594b8

NAME

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

TIFFYCbCrToRGBInit, TIFFYCbCrtoRGB, TIFFCIELabToRGBInit,

Packit Service 2594b8
TIFFCIELabToXYZ, TIFFXYZToRGB − color conversion
Packit Service 2594b8
routines.

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

SYNOPSIS

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

#include <tiffio.h>

Packit Service 2594b8
Packit Service 2594b8

int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB

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

Packit Service 2594b8
Packit Service 2594b8

int TIFFCIELabToRGBInit(TIFFCIELabToRGB

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

DESCRIPTION

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

TIFF supports several color spaces for images stored in

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

Packit Service 2594b8
Packit Service 2594b8

TIFFYCbCrToRGBInit() used to initialize

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

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

int*

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

Cr_r_tab;

Packit Service 2594b8
int*

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

Cb_b_tab;

Packit Service 2594b8
int32*

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

Cr_g_tab;

Packit Service 2594b8
int32*

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

Cb_g_tab;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

int32* Y_tab;

Packit Service 2594b8
} TIFFYCbCrToRGB;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

luma is a float array of three values representing

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

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

_TIFFmalloc(TIFFroundup(sizeof(TIFFYCbCrToRGB),

Packit Service 2594b8
sizeof(long))

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

+ 4*256*sizeof(TIFFRGBValue)

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

+ 2*256*sizeof(int)

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

+ 3*256*sizeof(int32));

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

if (ycbcr == NULL) {

Packit Service 2594b8
TIFFError("YCbCr->RGB",

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="4" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

"No space for YCbCr->RGB conversion

Packit Service 2594b8
state");

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

exit(0);

Packit Service 2594b8
}

Packit Service 2594b8
Packit Service 2594b8

TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRCOEFFICIENTS,

Packit Service 2594b8
&luma);
Packit Service 2594b8
TIFFGetFieldDefaulted(tif, TIFFTAG_REFERENCEBLACKWHITE,
Packit Service 2594b8
&refBlackWhite);
Packit Service 2594b8
if (TIFFYCbCrToRGBInit(ycbcr, luma, refBlackWhite) <
Packit Service 2594b8
0)

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

exit(0);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

/* Start conversion */

Packit Service 2594b8
uint32 r, g, b;
Packit Service 2594b8
uint32 Y;
Packit Service 2594b8
int32 Cb, Cr;

Packit Service 2594b8
Packit Service 2594b8

for each pixel in image

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
&b);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

/* Free state structure */

Packit Service 2594b8
_TIFFfree(ycbcr);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

TIFFCIELabToRGBInit() initializes the CIE

Packit Service 2594b8
L*a*b* 1976 to RGB conversion state.
Packit Service 2594b8
TIFFCIELabToRGB defined as

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
#define CIELABTORGB_TABLE_RANGE 1500
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="9" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

typedef struct {

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

/* CIE Lab 1976->RGB support */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

int

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

range;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

/* Size of conversion table */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

rstep, gstep, bstep;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

X0, Y0, Z0;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

/* Reference white point */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

TIFFDisplay display;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
to r */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
to g */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
to b */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

} TIFFCIELabToRGB;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

display is a display device description, declared

Packit Service 2594b8
as

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
typedef struct {
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_YCG;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_YCB;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

uint32 d_Vrwg;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

uint32 d_Vrwb;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_Y0G;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_Y0B;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_gammaR; /* Gamma values for the three guns

Packit Service 2594b8
*/

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_gammaG;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

float d_gammaB;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

} TIFFDisplay;

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
following parameters:

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
TIFFDisplay display_sRGB = {
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="5" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

{ /* XYZ -> luminance matrix */

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

{ 0.0556F, -0.2040F, 1.0570F }

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

},

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
*/

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
*/

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
*/

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

};

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

refWhite is a color temperature of the reference

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

refWhite_Y = 100.0

Packit Service 2594b8
refWhite_X = whitePoint_x / whitePoint_y * refWhite_Y
Packit Service 2594b8
refWhite_Z = (1.0 - whitePoint_x - whitePoint_y) /
Packit Service 2594b8
whitePoint_y * refWhite_X

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

The conversion itself performed in two steps: at the

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

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

_TIFFmalloc(sizeof(TIFFCIELabToRGB));

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

if (!cielab) {

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="5" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
state.");

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

exit(0);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

}

Packit Service 2594b8
Packit Service 2594b8

TIFFGetFieldDefaulted(tif, TIFFTAG_WHITEPOINT,

Packit Service 2594b8
&whitePoint);
Packit Service 2594b8
refWhite[1] = 100.0F;
Packit Service 2594b8
refWhite[0] = whitePoint[0] / whitePoint[1] *
Packit Service 2594b8
refWhite[1];
Packit Service 2594b8
refWhite[2] = (1.0F - whitePoint[0] -
Packit Service 2594b8
whitePoint[1])

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

/ whitePoint[1] * refWhite[1];

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

if (TIFFCIELabToRGBInit(cielab, &display_sRGB,

Packit Service 2594b8
refWhite) < 0) {

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="5" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
state.");

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

_TIFFfree(cielab);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

exit(0);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

}

Packit Service 2594b8
Packit Service 2594b8

/* Now we can start to convert */

Packit Service 2594b8
uint32 r, g, b;
Packit Service 2594b8
uint32 L;
Packit Service 2594b8
int32 a, b;
Packit Service 2594b8
float X, Y, Z;

Packit Service 2594b8
Packit Service 2594b8

for each pixel in image

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
&Z);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
&b);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

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

Packit Service 2594b8
_TIFFfree(cielab);

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

SEE ALSO

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
       cols="2" cellspacing="0" cellpadding="0">
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

TIFFRGBAImage(3TIFF) libtiff(3TIFF),

Packit Service 2594b8
Packit Service 2594b8

Libtiff library home page:

Packit Service 2594b8
http://www.simplesystems.org/libtiff/

Packit Service 2594b8
Packit Service 2594b8
Packit Service 2594b8

Packit Service 2594b8
</body>
Packit Service 2594b8
</html>