]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/tiff/html/man/TIFFcolor.3tiff.html
fix bug with adding entries to a root group containing only subgroups (as shown by...
[wxWidgets.git] / src / tiff / html / man / TIFFcolor.3tiff.html
... / ...
CommitLineData
1<!-- Creator : groff version 1.18.1 -->
2<!-- CreationDate: Mon Mar 13 18:03:08 2006 -->
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,
27TIFFCIELabToXYZ, TIFFXYZToRGB &minus; color conversion
28routines.</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>
44void TIFFYCbCrtoRGB(TIFFYCbCrToRGB *</b><i>ycbcr</i><b>,
45uint32</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>,
51float *</b><i>refWhite</i><b>);<br>
52void TIFFCIELabToXYZ(TIFFCIELabToRGB *</b><i>cielab</i><b>,
53uint32</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>,
55float *</b><i>Z</i><b>);<br>
56void TIFFXYZToRGB(TIFFCIELabToRGB *</b><i>cielab</i><b>,
57float</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>,
59uint32 *</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
71that format. There is usually a problem of application to
72handle the data properly and convert between different
73colorspaces for displaying and printing purposes. To
74simplify this task libtiff implements several color
75conversion routines itself. In particular, these routines
76used 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
80freeing 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>
108int*</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>
119int32*</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>
130int32*</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
161proportions of the red, green and blue in luminance, Y (see
162section 21 of the TIFF 6.0 specification, where the YCbCr
163images discussed). <i>TIFFTAG_YCBCRCOEFFICIENTS</i> holds
164that values in TIFF file. <i>refBlackWhite</i> is a float
165array of 6 values which specifies a pair of headroom and
166footroom image data values (codes) for each image component
167(see section 20 of the TIFF 6.0 specification where the
168colorinmetry fields discussed).
169<i>TIFFTAG_REFERENCEBLACKWHITE</i> is responsible for
170storing these values in TIFF file. Following code snippet
171should 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;
181uint16 hs, vs;
182
183/* Initialize structures */
184ycbcr = (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),
197sizeof(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>
225TIFFError(&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
237state&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>
253TIFFGetFieldDefaulted(tif, TIFFTAG_REFERENCEBLACKWHITE,
254&amp;refBlackWhite);<br>
255if (TIFFYCbCrToRGBInit(ycbcr, luma, refBlackWhite) &lt;
2560)</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>
275uint32 r, g, b;<br>
276uint32 Y;<br>
277int32 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
308L*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
432to 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
451to 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
470to 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
493as</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
605following 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
735white. The <i>TIFFTAG_WHITEPOINT</i> contains the
736chromaticity of the white point of the image from where the
737reference white can be calculated using following
738formulae:</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>
748refWhite_X = whitePoint_x / whitePoint_y * refWhite_Y<br>
749refWhite_Z = (1.0 - whitePoint_x - whitePoint_y) /
750whitePoint_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
759first one we will convert <i>CIE L*a*b* 1976</i> to <i>CIE
760XYZ</i> using <b>TIFFCIELabToXYZ()</b> routine, and at the
761second step we will convert <i>CIE XYZ</i> to <i>RGB</i>
762using <b>TIFFXYZToRGB().</b> Look at the code sample
763below:</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;
773float refWhite[3];
774
775/* Initialize structures */
776img-&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
820state.&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>
845refWhite[1] = 100.0F;<br>
846refWhite[0] = whitePoint[0] / whitePoint[1] *
847refWhite[1];<br>
848refWhite[2] = (1.0F - whitePoint[0] -
849whitePoint[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,
868refWhite) &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
891state.&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>
925uint32 r, g, b;<br>
926uint32 L;<br>
927int32 a, b;<br>
928float 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>