~ubuntu-branches/ubuntu/oneiric/tiff/oneiric

« back to all changes in this revision

Viewing changes to html/man/TIFFcolor.3tiff.html

  • Committer: Bazaar Package Importer
  • Author(s): Jay Berkenbilt
  • Date: 2009-08-28 15:44:23 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090828154423-7oisj77n302jrroa
Tags: 3.9.1-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!-- Creator     : groff version 1.18.1 -->
 
2
<!-- CreationDate: Fri Jul 13 17:43:15 2007 -->
 
3
<html>
 
4
<head>
 
5
<meta name="generator" content="groff -Thtml, see www.gnu.org">
 
6
<meta name="Content-Style" content="text/css">
 
7
<title>COLOR</title>
 
8
</head>
 
9
<body>
 
10
 
 
11
<h1 align=center>COLOR</h1>
 
12
<a href="#NAME">NAME</a><br>
 
13
<a href="#SYNOPSIS">SYNOPSIS</a><br>
 
14
<a href="#DESCRIPTION">DESCRIPTION</a><br>
 
15
<a href="#SEE ALSO">SEE ALSO</a><br>
 
16
 
 
17
<hr>
 
18
<a name="NAME"></a>
 
19
<h2>NAME</h2>
 
20
<!-- INDENTATION -->
 
21
<table width="100%" border=0 rules="none" frame="void"
 
22
       cols="2" cellspacing="0" cellpadding="0">
 
23
<tr valign="top" align="left">
 
24
<td width="8%"></td>
 
25
<td width="91%">
 
26
<p>TIFFYCbCrToRGBInit, TIFFYCbCrtoRGB, TIFFCIELabToRGBInit,
 
27
TIFFCIELabToXYZ, TIFFXYZToRGB &minus; color conversion
 
28
routines.</p>
 
29
</td>
 
30
</table>
 
31
<a name="SYNOPSIS"></a>
 
32
<h2>SYNOPSIS</h2>
 
33
<!-- INDENTATION -->
 
34
<table width="100%" border=0 rules="none" frame="void"
 
35
       cols="2" cellspacing="0" cellpadding="0">
 
36
<tr valign="top" align="left">
 
37
<td width="8%"></td>
 
38
<td width="91%">
 
39
<p><b>#include &lt;tiffio.h&gt;</b></p>
 
40
<!-- INDENTATION -->
 
41
<p><b>int TIFFYCbCrToRGBInit(TIFFYCbCrToRGB
 
42
*</b><i>ycbcr</i><b>, float *</b><i>luma</i><b>, float
 
43
*</b><i>refBlackWhite&quot;</i><b>);&quot;<br>
 
44
void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *</b><i>ycbcr</i><b>,
 
45
uint32</b> <i>Y</i><b>, int32</b> <i>Cb</i><b>, int32</b>
 
46
<i>Cr</i><b>, uint32 *</b><i>R</i><b>, uint32
 
47
*</b><i>G</i><b>, uint32 *</b><i>B</i> <b>);</b></p>
 
48
<!-- INDENTATION -->
 
49
<p><b>int TIFFCIELabToRGBInit(TIFFCIELabToRGB
 
50
*</b><i>cielab</i><b>, TIFFDisplay *</b><i>display</i><b>,
 
51
float *</b><i>refWhite</i><b>);<br>
 
52
void TIFFCIELabToXYZ(TIFFCIELabToRGB *</b><i>cielab</i><b>,
 
53
uint32</b> <i>L</i><b>, int32</b> <i>a</i><b>, int32</b>
 
54
<i>b</i><b>, float *</b><i>X</i><b>, float *</b><i>Y</i><b>,
 
55
float *</b><i>Z</i><b>);<br>
 
56
void TIFFXYZToRGB(TIFFCIELabToRGB *</b><i>cielab</i><b>,
 
57
float</b> <i>X</i><b>, float</b> <i>Y</i><b>, float</b>
 
58
<i>Z&quot;</i><b>,</b><i>uint32</i><b>*&quot;</b><i>R</i><b>,
 
59
uint32 *</b><i>G</i><b>, uint32 *</b><i>B</i><b>);</b></p>
 
60
</td>
 
61
</table>
 
62
<a name="DESCRIPTION"></a>
 
63
<h2>DESCRIPTION</h2>
 
64
<!-- INDENTATION -->
 
65
<table width="100%" border=0 rules="none" frame="void"
 
66
       cols="2" cellspacing="0" cellpadding="0">
 
67
<tr valign="top" align="left">
 
68
<td width="8%"></td>
 
69
<td width="91%">
 
70
<p>TIFF supports several color spaces for images stored in
 
71
that format. There is usually a problem of application to
 
72
handle the data properly and convert between different
 
73
colorspaces for displaying and printing purposes. To
 
74
simplify this task libtiff implements several color
 
75
conversion routines itself. In particular, these routines
 
76
used in <b>TIFFRGBAImage(3TIFF)</b> interface.</p>
 
77
<!-- INDENTATION -->
 
78
<p><b>TIFFYCbCrToRGBInit()</b> used to initialize
 
79
<i>YCbCr</i> to <i>RGB</i> conversion state. Allocating and
 
80
freeing of the <i>ycbcr</i> structure belongs to programmer.
 
81
<i>TIFFYCbCrToRGB</i> defined in <b>tiffio.h</b> as</p>
 
82
</td>
 
83
</table>
 
84
<!-- INDENTATION -->
 
85
<table width="100%" border=0 rules="none" frame="void"
 
86
       cols="2" cellspacing="0" cellpadding="0">
 
87
<tr valign="top" align="left">
 
88
<td width="17%"></td>
 
89
<td width="82%">
 
90
<pre>typedef struct {                /* YCbCr-&gt;RGB support */
 
91
        TIFFRGBValue* clamptab; /* range clamping table */
 
92
</pre>
 
93
</td>
 
94
</table>
 
95
<!-- TABS -->
 
96
 
 
97
<table width="100%" border=0 rules="none" frame="void"
 
98
       cols="5" cellspacing="0" cellpadding="0">
 
99
<tr valign="top" align="left">
 
100
 
 
101
<p>int*</p>
 
102
<td width="28%"></td>
 
103
<td width="-3%"></td>
 
104
<td width="12%"></td>
 
105
<td width="6%">
 
106
 
 
107
<p>Cr_r_tab;<br>
 
108
int*</p>
 
109
</td>
 
110
<td width="56%">
 
111
</td>
 
112
<tr valign="top" align="left">
 
113
<td width="28%"></td>
 
114
<td width="-3%"></td>
 
115
<td width="12%"></td>
 
116
<td width="6%">
 
117
 
 
118
<p>Cb_b_tab;<br>
 
119
int32*</p>
 
120
</td>
 
121
<td width="56%">
 
122
</td>
 
123
<tr valign="top" align="left">
 
124
<td width="28%"></td>
 
125
<td width="-3%"></td>
 
126
<td width="12%"></td>
 
127
<td width="6%">
 
128
 
 
129
<p>Cr_g_tab;<br>
 
130
int32*</p>
 
131
</td>
 
132
<td width="56%">
 
133
</td>
 
134
<tr valign="top" align="left">
 
135
<td width="28%"></td>
 
136
<td width="-3%"></td>
 
137
<td width="12%"></td>
 
138
<td width="6%">
 
139
 
 
140
<p>Cb_g_tab;</p>
 
141
</td>
 
142
<td width="56%">
 
143
</td>
 
144
</table>
 
145
<!-- INDENTATION -->
 
146
<table width="100%" border=0 rules="none" frame="void"
 
147
       cols="2" cellspacing="0" cellpadding="0">
 
148
<tr valign="top" align="left">
 
149
<td width="17%"></td>
 
150
<td width="82%">
 
151
<p>int32* Y_tab;<br>
 
152
} TIFFYCbCrToRGB;</p></td>
 
153
</table>
 
154
<!-- INDENTATION -->
 
155
<table width="100%" border=0 rules="none" frame="void"
 
156
       cols="2" cellspacing="0" cellpadding="0">
 
157
<tr valign="top" align="left">
 
158
<td width="8%"></td>
 
159
<td width="91%">
 
160
<p><i>luma</i> is a float array of three values representing
 
161
proportions of the red, green and blue in luminance, Y (see
 
162
section 21 of the TIFF 6.0 specification, where the YCbCr
 
163
images discussed). <i>TIFFTAG_YCBCRCOEFFICIENTS</i> holds
 
164
that values in TIFF file. <i>refBlackWhite</i> is a float
 
165
array of 6 values which specifies a pair of headroom and
 
166
footroom image data values (codes) for each image component
 
167
(see section 20 of the TIFF 6.0 specification where the
 
168
colorinmetry fields discussed).
 
169
<i>TIFFTAG_REFERENCEBLACKWHITE</i> is responsible for
 
170
storing these values in TIFF file. Following code snippet
 
171
should helps to understand the the technique:</p>
 
172
</td>
 
173
</table>
 
174
<!-- INDENTATION -->
 
175
<table width="100%" border=0 rules="none" frame="void"
 
176
       cols="2" cellspacing="0" cellpadding="0">
 
177
<tr valign="top" align="left">
 
178
<td width="17%"></td>
 
179
<td width="82%">
 
180
<pre>float *luma, *refBlackWhite;
 
181
uint16 hs, vs;
 
182
 
 
183
/* Initialize structures */
 
184
ycbcr = (TIFFYCbCrToRGB*)
 
185
</pre>
 
186
</td>
 
187
</table>
 
188
<!-- TABS -->
 
189
 
 
190
<table width="100%" border=0 rules="none" frame="void"
 
191
       cols="2" cellspacing="0" cellpadding="0">
 
192
<tr valign="top" align="left">
 
193
<td width="24%"></td>
 
194
<td width="75%">
 
195
 
 
196
<p>_TIFFmalloc(TIFFroundup(sizeof(TIFFYCbCrToRGB),
 
197
sizeof(long))</p>
 
198
</td>
 
199
<tr valign="top" align="left">
 
200
<td width="24%"></td>
 
201
<td width="75%">
 
202
 
 
203
<p>+ 4*256*sizeof(TIFFRGBValue)</p>
 
204
</td>
 
205
<tr valign="top" align="left">
 
206
<td width="24%"></td>
 
207
<td width="75%">
 
208
 
 
209
<p>+ 2*256*sizeof(int)</p>
 
210
</td>
 
211
<tr valign="top" align="left">
 
212
<td width="24%"></td>
 
213
<td width="75%">
 
214
 
 
215
<p>+ 3*256*sizeof(int32));</p>
 
216
</td>
 
217
</table>
 
218
<!-- INDENTATION -->
 
219
<table width="100%" border=0 rules="none" frame="void"
 
220
       cols="2" cellspacing="0" cellpadding="0">
 
221
<tr valign="top" align="left">
 
222
<td width="17%"></td>
 
223
<td width="82%">
 
224
<p>if (ycbcr == NULL) {<br>
 
225
TIFFError(&quot;YCbCr-&gt;RGB&quot;,</p></td>
 
226
</table>
 
227
<!-- TABS -->
 
228
<table width="100%" border=0 rules="none" frame="void"
 
229
       cols="4" cellspacing="0" cellpadding="0">
 
230
<tr valign="top" align="left">
 
231
<td width="24%"></td>
 
232
<td width="6%">
 
233
</td>
 
234
<td width="6%">
 
235
 
 
236
<p>&quot;No space for YCbCr-&gt;RGB conversion
 
237
state&quot;);</p>
 
238
</td>
 
239
<td width="62%">
 
240
</td>
 
241
</table>
 
242
<!-- INDENTATION -->
 
243
<table width="100%" border=0 rules="none" frame="void"
 
244
       cols="2" cellspacing="0" cellpadding="0">
 
245
<tr valign="top" align="left">
 
246
<td width="17%"></td>
 
247
<td width="82%">
 
248
<p>exit(0);<br>
 
249
}</p>
 
250
<!-- INDENTATION -->
 
251
<p>TIFFGetFieldDefaulted(tif, TIFFTAG_YCBCRCOEFFICIENTS,
 
252
&amp;luma);<br>
 
253
TIFFGetFieldDefaulted(tif, TIFFTAG_REFERENCEBLACKWHITE,
 
254
&amp;refBlackWhite);<br>
 
255
if (TIFFYCbCrToRGBInit(ycbcr, luma, refBlackWhite) &lt;
 
256
0)</p></td>
 
257
</table>
 
258
<!-- TABS -->
 
259
<table width="100%" border=0 rules="none" frame="void"
 
260
       cols="2" cellspacing="0" cellpadding="0">
 
261
<tr valign="top" align="left">
 
262
<td width="24%"></td>
 
263
<td width="75%">
 
264
 
 
265
<p>exit(0);</p>
 
266
</td>
 
267
</table>
 
268
<!-- INDENTATION -->
 
269
<table width="100%" border=0 rules="none" frame="void"
 
270
       cols="2" cellspacing="0" cellpadding="0">
 
271
<tr valign="top" align="left">
 
272
<td width="17%"></td>
 
273
<td width="82%">
 
274
<p>/* Start conversion */<br>
 
275
uint32 r, g, b;<br>
 
276
uint32 Y;<br>
 
277
int32 Cb, Cr;</p>
 
278
<!-- INDENTATION -->
 
279
<p>for each pixel in image</p></td>
 
280
</table>
 
281
<!-- TABS -->
 
282
<table width="100%" border=0 rules="none" frame="void"
 
283
       cols="2" cellspacing="0" cellpadding="0">
 
284
<tr valign="top" align="left">
 
285
<td width="24%"></td>
 
286
<td width="75%">
 
287
 
 
288
<p>TIFFYCbCrtoRGB(img-&gt;ycbcr, Y, Cb, Cr, &amp;r, &amp;g,
 
289
&amp;b);</p>
 
290
</td>
 
291
</table>
 
292
<!-- INDENTATION -->
 
293
<table width="100%" border=0 rules="none" frame="void"
 
294
       cols="2" cellspacing="0" cellpadding="0">
 
295
<tr valign="top" align="left">
 
296
<td width="17%"></td>
 
297
<td width="82%">
 
298
<p>/* Free state structure */<br>
 
299
_TIFFfree(ycbcr);</p></td>
 
300
</table>
 
301
<!-- INDENTATION -->
 
302
<table width="100%" border=0 rules="none" frame="void"
 
303
       cols="2" cellspacing="0" cellpadding="0">
 
304
<tr valign="top" align="left">
 
305
<td width="8%"></td>
 
306
<td width="91%">
 
307
<p><b>TIFFCIELabToRGBInit()</b> initializes the <i>CIE
 
308
L*a*b* 1976</i> to <i>RGB</i> conversion state.
 
309
<b>TIFFCIELabToRGB</b> defined as</p>
 
310
</td>
 
311
</table>
 
312
<!-- INDENTATION -->
 
313
<table width="100%" border=0 rules="none" frame="void"
 
314
       cols="2" cellspacing="0" cellpadding="0">
 
315
<tr valign="top" align="left">
 
316
<td width="17%"></td>
 
317
<td width="82%">
 
318
<pre>#define CIELABTORGB_TABLE_RANGE 1500
 
319
 
 
320
</pre>
 
321
</td>
 
322
</table>
 
323
<!-- TABS -->
 
324
 
 
325
<table width="100%" border=0 rules="none" frame="void"
 
326
       cols="9" cellspacing="0" cellpadding="0">
 
327
<tr valign="top" align="left">
 
328
<td width="17%"></td>
 
329
<td width="6%">
 
330
 
 
331
<p>typedef struct {</p>
 
332
</td>
 
333
<td width="6%"></td>
 
334
<td width="6%"></td>
 
335
<td width="6%"></td>
 
336
<td width="6%">
 
337
</td>
 
338
<td width="6%">
 
339
 
 
340
<p>/* CIE Lab 1976-&gt;RGB support */</p>
 
341
</td>
 
342
<td width="6%"></td>
 
343
<td width="37%">
 
344
</td>
 
345
<tr valign="top" align="left">
 
346
<td width="17%"></td>
 
347
<td width="6%">
 
348
</td>
 
349
<td width="6%">
 
350
 
 
351
<p>int</p>
 
352
</td>
 
353
<td width="6%">
 
354
 
 
355
<p>range;</p>
 
356
</td>
 
357
<td width="6%"></td>
 
358
<td width="6%">
 
359
</td>
 
360
<td width="6%">
 
361
 
 
362
<p>/* Size of conversion table */</p>
 
363
</td>
 
364
<td width="6%"></td>
 
365
<td width="37%">
 
366
</td>
 
367
<tr valign="top" align="left">
 
368
<td width="17%"></td>
 
369
<td width="6%">
 
370
</td>
 
371
<td width="6%">
 
372
 
 
373
<p>float</p>
 
374
</td>
 
375
<td width="6%"></td>
 
376
<td width="6%">
 
377
 
 
378
<p>rstep, gstep, bstep;</p>
 
379
</td>
 
380
<td width="6%"></td>
 
381
<td width="6%"></td>
 
382
<td width="6%"></td>
 
383
<td width="37%">
 
384
</td>
 
385
<tr valign="top" align="left">
 
386
<td width="17%"></td>
 
387
<td width="6%">
 
388
</td>
 
389
<td width="6%">
 
390
 
 
391
<p>float</p>
 
392
</td>
 
393
<td width="6%"></td>
 
394
<td width="6%">
 
395
 
 
396
<p>X0, Y0, Z0;</p>
 
397
</td>
 
398
<td width="6%"></td>
 
399
<td width="6%"></td>
 
400
<td width="6%">
 
401
 
 
402
<p>/* Reference white point */</p>
 
403
</td>
 
404
<td width="37%">
 
405
</td>
 
406
<tr valign="top" align="left">
 
407
<td width="17%"></td>
 
408
<td width="6%"></td>
 
409
<td width="6%">
 
410
 
 
411
<p>TIFFDisplay display;</p>
 
412
</td>
 
413
<td width="6%"></td>
 
414
<td width="6%"></td>
 
415
<td width="6%"></td>
 
416
<td width="6%"></td>
 
417
<td width="6%"></td>
 
418
<td width="37%">
 
419
</td>
 
420
<tr valign="top" align="left">
 
421
<td width="17%"></td>
 
422
<td width="6%">
 
423
</td>
 
424
<td width="6%">
 
425
 
 
426
<p>float</p>
 
427
</td>
 
428
<td width="6%"></td>
 
429
<td width="6%">
 
430
 
 
431
<p>Yr2r[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yr
 
432
to r */</p>
 
433
</td>
 
434
<td width="6%"></td>
 
435
<td width="6%"></td>
 
436
<td width="6%"></td>
 
437
<td width="37%">
 
438
</td>
 
439
<tr valign="top" align="left">
 
440
<td width="17%"></td>
 
441
<td width="6%">
 
442
</td>
 
443
<td width="6%">
 
444
 
 
445
<p>float</p>
 
446
</td>
 
447
<td width="6%"></td>
 
448
<td width="6%">
 
449
 
 
450
<p>Yg2g[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yg
 
451
to g */</p>
 
452
</td>
 
453
<td width="6%"></td>
 
454
<td width="6%"></td>
 
455
<td width="6%"></td>
 
456
<td width="37%">
 
457
</td>
 
458
<tr valign="top" align="left">
 
459
<td width="17%"></td>
 
460
<td width="6%">
 
461
</td>
 
462
<td width="6%">
 
463
 
 
464
<p>float</p>
 
465
</td>
 
466
<td width="6%"></td>
 
467
<td width="6%">
 
468
 
 
469
<p>Yb2b[CIELABTORGB_TABLE_RANGE + 1]; /* Conversion of Yb
 
470
to b */</p>
 
471
</td>
 
472
<td width="6%"></td>
 
473
<td width="6%"></td>
 
474
<td width="6%"></td>
 
475
<td width="37%">
 
476
</td>
 
477
</table>
 
478
<!-- INDENTATION -->
 
479
<table width="100%" border=0 rules="none" frame="void"
 
480
       cols="2" cellspacing="0" cellpadding="0">
 
481
<tr valign="top" align="left">
 
482
<td width="17%"></td>
 
483
<td width="82%">
 
484
<p>} TIFFCIELabToRGB;</p></td>
 
485
</table>
 
486
<!-- INDENTATION -->
 
487
<table width="100%" border=0 rules="none" frame="void"
 
488
       cols="2" cellspacing="0" cellpadding="0">
 
489
<tr valign="top" align="left">
 
490
<td width="8%"></td>
 
491
<td width="91%">
 
492
<p><i>display</i> is a display device description, declared
 
493
as</p>
 
494
</td>
 
495
</table>
 
496
<!-- INDENTATION -->
 
497
<table width="100%" border=0 rules="none" frame="void"
 
498
       cols="2" cellspacing="0" cellpadding="0">
 
499
<tr valign="top" align="left">
 
500
<td width="17%"></td>
 
501
<td width="82%">
 
502
<pre>typedef struct {
 
503
</pre>
 
504
</td>
 
505
</table>
 
506
<!-- TABS -->
 
507
 
 
508
<table width="100%" border=0 rules="none" frame="void"
 
509
       cols="2" cellspacing="0" cellpadding="0">
 
510
<tr valign="top" align="left">
 
511
<td width="24%"></td>
 
512
<td width="75%">
 
513
 
 
514
<p>float d_mat[3][3]; /* XYZ -&gt; luminance matrix */</p>
 
515
</td>
 
516
<tr valign="top" align="left">
 
517
<td width="24%"></td>
 
518
<td width="75%">
 
519
 
 
520
<p>float d_YCR; /* Light o/p for reference white */</p>
 
521
</td>
 
522
<tr valign="top" align="left">
 
523
<td width="24%"></td>
 
524
<td width="75%">
 
525
 
 
526
<p>float d_YCG;</p>
 
527
</td>
 
528
<tr valign="top" align="left">
 
529
<td width="24%"></td>
 
530
<td width="75%">
 
531
 
 
532
<p>float d_YCB;</p>
 
533
</td>
 
534
<tr valign="top" align="left">
 
535
<td width="24%"></td>
 
536
<td width="75%">
 
537
 
 
538
<p>uint32 d_Vrwr; /* Pixel values for ref. white */</p>
 
539
</td>
 
540
<tr valign="top" align="left">
 
541
<td width="24%"></td>
 
542
<td width="75%">
 
543
 
 
544
<p>uint32 d_Vrwg;</p>
 
545
</td>
 
546
<tr valign="top" align="left">
 
547
<td width="24%"></td>
 
548
<td width="75%">
 
549
 
 
550
<p>uint32 d_Vrwb;</p>
 
551
</td>
 
552
<tr valign="top" align="left">
 
553
<td width="24%"></td>
 
554
<td width="75%">
 
555
 
 
556
<p>float d_Y0R; /* Residual light for black pixel */</p>
 
557
</td>
 
558
<tr valign="top" align="left">
 
559
<td width="24%"></td>
 
560
<td width="75%">
 
561
 
 
562
<p>float d_Y0G;</p>
 
563
</td>
 
564
<tr valign="top" align="left">
 
565
<td width="24%"></td>
 
566
<td width="75%">
 
567
 
 
568
<p>float d_Y0B;</p>
 
569
</td>
 
570
<tr valign="top" align="left">
 
571
<td width="24%"></td>
 
572
<td width="75%">
 
573
 
 
574
<p>float d_gammaR; /* Gamma values for the three guns
 
575
*/</p>
 
576
</td>
 
577
<tr valign="top" align="left">
 
578
<td width="24%"></td>
 
579
<td width="75%">
 
580
 
 
581
<p>float d_gammaG;</p>
 
582
</td>
 
583
<tr valign="top" align="left">
 
584
<td width="24%"></td>
 
585
<td width="75%">
 
586
 
 
587
<p>float d_gammaB;</p>
 
588
</td>
 
589
</table>
 
590
<!-- INDENTATION -->
 
591
<table width="100%" border=0 rules="none" frame="void"
 
592
       cols="2" cellspacing="0" cellpadding="0">
 
593
<tr valign="top" align="left">
 
594
<td width="17%"></td>
 
595
<td width="82%">
 
596
<p>} TIFFDisplay;</p></td>
 
597
</table>
 
598
<!-- INDENTATION -->
 
599
<table width="100%" border=0 rules="none" frame="void"
 
600
       cols="2" cellspacing="0" cellpadding="0">
 
601
<tr valign="top" align="left">
 
602
<td width="8%"></td>
 
603
<td width="91%">
 
604
<p>For example, the one can use sRGB device, which has the
 
605
following parameters:</p>
 
606
</td>
 
607
</table>
 
608
<!-- INDENTATION -->
 
609
<table width="100%" border=0 rules="none" frame="void"
 
610
       cols="2" cellspacing="0" cellpadding="0">
 
611
<tr valign="top" align="left">
 
612
<td width="17%"></td>
 
613
<td width="82%">
 
614
<pre>TIFFDisplay display_sRGB = {
 
615
</pre>
 
616
</td>
 
617
</table>
 
618
<!-- TABS -->
 
619
 
 
620
<table width="100%" border=0 rules="none" frame="void"
 
621
       cols="5" cellspacing="0" cellpadding="0">
 
622
<tr valign="top" align="left">
 
623
<td width="24%"></td>
 
624
<td width="0%"></td>
 
625
<td width="6%">
 
626
 
 
627
<p>{ /* XYZ -&gt; luminance matrix */</p>
 
628
</td>
 
629
<td width="6%"></td>
 
630
<td width="62%">
 
631
</td>
 
632
<tr valign="top" align="left">
 
633
<td width="24%"></td>
 
634
<td width="0%"></td>
 
635
<td width="6%">
 
636
</td>
 
637
<td width="6%">
 
638
 
 
639
<p>{ 3.2410F, -1.5374F, -0.4986F },</p>
 
640
</td>
 
641
<td width="62%">
 
642
</td>
 
643
<tr valign="top" align="left">
 
644
<td width="24%"></td>
 
645
<td width="0%"></td>
 
646
<td width="6%">
 
647
</td>
 
648
<td width="6%">
 
649
 
 
650
<p>{ -0.9692F, 1.8760F, 0.0416F },</p>
 
651
</td>
 
652
<td width="62%">
 
653
</td>
 
654
<tr valign="top" align="left">
 
655
<td width="24%"></td>
 
656
<td width="0%"></td>
 
657
<td width="6%">
 
658
</td>
 
659
<td width="6%">
 
660
 
 
661
<p>{ 0.0556F, -0.2040F, 1.0570F }</p>
 
662
</td>
 
663
<td width="62%">
 
664
</td>
 
665
<tr valign="top" align="left">
 
666
<td width="24%"></td>
 
667
<td width="0%"></td>
 
668
<td width="6%">
 
669
 
 
670
<p>},</p>
 
671
</td>
 
672
<td width="6%">
 
673
</td>
 
674
<td width="62%">
 
675
</td>
 
676
<tr valign="top" align="left">
 
677
<td width="24%"></td>
 
678
<td width="0%"></td>
 
679
<td width="6%">
 
680
 
 
681
<p>100.0F, 100.0F, 100.0F, /* Light o/p for reference white
 
682
*/</p>
 
683
</td>
 
684
<td width="6%"></td>
 
685
<td width="62%">
 
686
</td>
 
687
<tr valign="top" align="left">
 
688
<td width="24%"></td>
 
689
<td width="0%"></td>
 
690
<td width="6%">
 
691
 
 
692
<p>255, 255, 255, /* Pixel values for ref. white */</p>
 
693
</td>
 
694
<td width="6%"></td>
 
695
<td width="62%">
 
696
</td>
 
697
<tr valign="top" align="left">
 
698
<td width="24%"></td>
 
699
<td width="0%"></td>
 
700
<td width="6%">
 
701
 
 
702
<p>1.0F, 1.0F, 1.0F, /* Residual light o/p for black pixel
 
703
*/</p>
 
704
</td>
 
705
<td width="6%"></td>
 
706
<td width="62%">
 
707
</td>
 
708
<tr valign="top" align="left">
 
709
<td width="24%"></td>
 
710
<td width="0%"></td>
 
711
<td width="6%">
 
712
 
 
713
<p>2.4F, 2.4F, 2.4F, /* Gamma values for the three guns
 
714
*/</p>
 
715
</td>
 
716
<td width="6%"></td>
 
717
<td width="62%">
 
718
</td>
 
719
</table>
 
720
<!-- INDENTATION -->
 
721
<table width="100%" border=0 rules="none" frame="void"
 
722
       cols="2" cellspacing="0" cellpadding="0">
 
723
<tr valign="top" align="left">
 
724
<td width="17%"></td>
 
725
<td width="82%">
 
726
<p>};</p></td>
 
727
</table>
 
728
<!-- INDENTATION -->
 
729
<table width="100%" border=0 rules="none" frame="void"
 
730
       cols="2" cellspacing="0" cellpadding="0">
 
731
<tr valign="top" align="left">
 
732
<td width="8%"></td>
 
733
<td width="91%">
 
734
<p><i>refWhite</i> is a color temperature of the reference
 
735
white. The <i>TIFFTAG_WHITEPOINT</i> contains the
 
736
chromaticity of the white point of the image from where the
 
737
reference white can be calculated using following
 
738
formulae:</p>
 
739
</td>
 
740
</table>
 
741
<!-- INDENTATION -->
 
742
<table width="100%" border=0 rules="none" frame="void"
 
743
       cols="2" cellspacing="0" cellpadding="0">
 
744
<tr valign="top" align="left">
 
745
<td width="17%"></td>
 
746
<td width="82%">
 
747
<p>refWhite_Y = 100.0<br>
 
748
refWhite_X = whitePoint_x / whitePoint_y * refWhite_Y<br>
 
749
refWhite_Z = (1.0 - whitePoint_x - whitePoint_y) /
 
750
whitePoint_y * refWhite_X</p></td>
 
751
</table>
 
752
<!-- INDENTATION -->
 
753
<table width="100%" border=0 rules="none" frame="void"
 
754
       cols="2" cellspacing="0" cellpadding="0">
 
755
<tr valign="top" align="left">
 
756
<td width="8%"></td>
 
757
<td width="91%">
 
758
<p>The conversion itself performed in two steps: at the
 
759
first one we will convert <i>CIE L*a*b* 1976</i> to <i>CIE
 
760
XYZ</i> using <b>TIFFCIELabToXYZ()</b> routine, and at the
 
761
second step we will convert <i>CIE XYZ</i> to <i>RGB</i>
 
762
using <b>TIFFXYZToRGB().</b> Look at the code sample
 
763
below:</p>
 
764
</td>
 
765
</table>
 
766
<!-- INDENTATION -->
 
767
<table width="100%" border=0 rules="none" frame="void"
 
768
       cols="2" cellspacing="0" cellpadding="0">
 
769
<tr valign="top" align="left">
 
770
<td width="17%"></td>
 
771
<td width="82%">
 
772
<pre>float   *whitePoint;
 
773
float   refWhite[3];
 
774
 
 
775
/* Initialize structures */
 
776
img-&gt;cielab = (TIFFCIELabToRGB *)
 
777
</pre>
 
778
</td>
 
779
</table>
 
780
<!-- TABS -->
 
781
 
 
782
<table width="100%" border=0 rules="none" frame="void"
 
783
       cols="2" cellspacing="0" cellpadding="0">
 
784
<tr valign="top" align="left">
 
785
<td width="24%"></td>
 
786
<td width="75%">
 
787
 
 
788
<p>_TIFFmalloc(sizeof(TIFFCIELabToRGB));</p>
 
789
</td>
 
790
</table>
 
791
<!-- INDENTATION -->
 
792
<table width="100%" border=0 rules="none" frame="void"
 
793
       cols="2" cellspacing="0" cellpadding="0">
 
794
<tr valign="top" align="left">
 
795
<td width="17%"></td>
 
796
<td width="82%">
 
797
<p>if (!cielab) {</p></td>
 
798
</table>
 
799
<!-- TABS -->
 
800
<table width="100%" border=0 rules="none" frame="void"
 
801
       cols="5" cellspacing="0" cellpadding="0">
 
802
<tr valign="top" align="left">
 
803
<td width="24%"></td>
 
804
<td width="0%"></td>
 
805
<td width="6%">
 
806
 
 
807
<p>TIFFError(&quot;CIE L*a*b*-&gt;RGB&quot;,</p>
 
808
</td>
 
809
<td width="6%"></td>
 
810
<td width="62%">
 
811
</td>
 
812
<tr valign="top" align="left">
 
813
<td width="24%"></td>
 
814
<td width="0%"></td>
 
815
<td width="6%">
 
816
</td>
 
817
<td width="6%">
 
818
 
 
819
<p>&quot;No space for CIE L*a*b*-&gt;RGB conversion
 
820
state.&quot;);</p>
 
821
</td>
 
822
<td width="62%">
 
823
</td>
 
824
<tr valign="top" align="left">
 
825
<td width="24%"></td>
 
826
<td width="0%"></td>
 
827
<td width="6%">
 
828
 
 
829
<p>exit(0);</p>
 
830
</td>
 
831
<td width="6%"></td>
 
832
<td width="62%">
 
833
</td>
 
834
</table>
 
835
<!-- INDENTATION -->
 
836
<table width="100%" border=0 rules="none" frame="void"
 
837
       cols="2" cellspacing="0" cellpadding="0">
 
838
<tr valign="top" align="left">
 
839
<td width="17%"></td>
 
840
<td width="82%">
 
841
<p>}</p>
 
842
<!-- INDENTATION -->
 
843
<p>TIFFGetFieldDefaulted(tif, TIFFTAG_WHITEPOINT,
 
844
&amp;whitePoint);<br>
 
845
refWhite[1] = 100.0F;<br>
 
846
refWhite[0] = whitePoint[0] / whitePoint[1] *
 
847
refWhite[1];<br>
 
848
refWhite[2] = (1.0F - whitePoint[0] -
 
849
whitePoint[1])</p></td>
 
850
</table>
 
851
<!-- TABS -->
 
852
<table width="100%" border=0 rules="none" frame="void"
 
853
       cols="2" cellspacing="0" cellpadding="0">
 
854
<tr valign="top" align="left">
 
855
<td width="24%"></td>
 
856
<td width="75%">
 
857
 
 
858
<p>/ whitePoint[1] * refWhite[1];</p>
 
859
</td>
 
860
</table>
 
861
<!-- INDENTATION -->
 
862
<table width="100%" border=0 rules="none" frame="void"
 
863
       cols="2" cellspacing="0" cellpadding="0">
 
864
<tr valign="top" align="left">
 
865
<td width="17%"></td>
 
866
<td width="82%">
 
867
<p>if (TIFFCIELabToRGBInit(cielab, &amp;display_sRGB,
 
868
refWhite) &lt; 0) {</p></td>
 
869
</table>
 
870
<!-- TABS -->
 
871
<table width="100%" border=0 rules="none" frame="void"
 
872
       cols="5" cellspacing="0" cellpadding="0">
 
873
<tr valign="top" align="left">
 
874
<td width="24%"></td>
 
875
<td width="0%"></td>
 
876
<td width="6%">
 
877
 
 
878
<p>TIFFError(&quot;CIE L*a*b*-&gt;RGB&quot;,</p>
 
879
</td>
 
880
<td width="6%"></td>
 
881
<td width="62%">
 
882
</td>
 
883
<tr valign="top" align="left">
 
884
<td width="24%"></td>
 
885
<td width="0%"></td>
 
886
<td width="6%">
 
887
</td>
 
888
<td width="6%">
 
889
 
 
890
<p>&quot;Failed to initialize CIE L*a*b*-&gt;RGB conversion
 
891
state.&quot;);</p>
 
892
</td>
 
893
<td width="62%">
 
894
</td>
 
895
<tr valign="top" align="left">
 
896
<td width="24%"></td>
 
897
<td width="0%"></td>
 
898
<td width="6%">
 
899
 
 
900
<p>_TIFFfree(cielab);</p>
 
901
</td>
 
902
<td width="6%"></td>
 
903
<td width="62%">
 
904
</td>
 
905
<tr valign="top" align="left">
 
906
<td width="24%"></td>
 
907
<td width="0%"></td>
 
908
<td width="6%">
 
909
 
 
910
<p>exit(0);</p>
 
911
</td>
 
912
<td width="6%"></td>
 
913
<td width="62%">
 
914
</td>
 
915
</table>
 
916
<!-- INDENTATION -->
 
917
<table width="100%" border=0 rules="none" frame="void"
 
918
       cols="2" cellspacing="0" cellpadding="0">
 
919
<tr valign="top" align="left">
 
920
<td width="17%"></td>
 
921
<td width="82%">
 
922
<p>}</p>
 
923
<!-- INDENTATION -->
 
924
<p>/* Now we can start to convert */<br>
 
925
uint32 r, g, b;<br>
 
926
uint32 L;<br>
 
927
int32 a, b;<br>
 
928
float X, Y, Z;</p>
 
929
<!-- INDENTATION -->
 
930
<p>for each pixel in image</p></td>
 
931
</table>
 
932
<!-- TABS -->
 
933
<table width="100%" border=0 rules="none" frame="void"
 
934
       cols="2" cellspacing="0" cellpadding="0">
 
935
<tr valign="top" align="left">
 
936
<td width="24%"></td>
 
937
<td width="75%">
 
938
 
 
939
<p>TIFFCIELabToXYZ(cielab, L, a, b, &amp;X, &amp;Y,
 
940
&amp;Z);</p>
 
941
</td>
 
942
<tr valign="top" align="left">
 
943
<td width="24%"></td>
 
944
<td width="75%">
 
945
 
 
946
<p>TIFFXYZToRGB(cielab, X, Y, Z, &amp;r, &amp;g,
 
947
&amp;b);</p>
 
948
</td>
 
949
</table>
 
950
<!-- INDENTATION -->
 
951
<table width="100%" border=0 rules="none" frame="void"
 
952
       cols="2" cellspacing="0" cellpadding="0">
 
953
<tr valign="top" align="left">
 
954
<td width="17%"></td>
 
955
<td width="82%">
 
956
<p>/* Don&rsquo;t forget to free the state structure */<br>
 
957
_TIFFfree(cielab);</p></td>
 
958
</table>
 
959
<a name="SEE ALSO"></a>
 
960
<h2>SEE ALSO</h2>
 
961
<!-- INDENTATION -->
 
962
<table width="100%" border=0 rules="none" frame="void"
 
963
       cols="2" cellspacing="0" cellpadding="0">
 
964
<tr valign="top" align="left">
 
965
<td width="8%"></td>
 
966
<td width="91%">
 
967
<p><b>TIFFRGBAImage</b>(3TIFF) <b>libtiff</b>(3TIFF),</p>
 
968
<!-- INDENTATION -->
 
969
<p>Libtiff library home page:
 
970
<b>http://www.remotesensing.org/libtiff/</b></p>
 
971
</td>
 
972
</table>
 
973
<hr>
 
974
</body>
 
975
</html>