| Bsoft 1.9 Bernard's software package

- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

tif_print.c
Go to the documentation of this file.
1 /* $Id: tif_print.c,v 1.36.2.4 2010-06-08 18:50:42 bfriesen Exp $ */
2
3 /*
4 * Copyright (c) 1988-1997 Sam Leffler
5 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and
8 * its documentation for any purpose is hereby granted without fee, provided
9 * that (i) the above copyright notices and this permission notice appear in
10 * all copies of the software and related documentation, and (ii) the names of
11 * Sam Leffler and Silicon Graphics may not be used in any advertising or
12 * publicity relating to the software without the specific, prior written
13 * permission of Sam Leffler and Silicon Graphics.
14 *
15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18 *
19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24 * OF THIS SOFTWARE.
25 */
26
27 /*
28 * TIFF Library.
29 *
30 * Directory Printing Support
31 */
32 #include "tiffiop.h"
33 #include <stdio.h>
34 #include <string.h>
35 #include <ctype.h>
36
37 static const char *photoNames[] = {
38 "min-is-white", /* PHOTOMETRIC_MINISWHITE */
39 "min-is-black", /* PHOTOMETRIC_MINISBLACK */
40 "RGB color", /* PHOTOMETRIC_RGB */
41 "palette color (RGB from colormap)", /* PHOTOMETRIC_PALETTE */
42 "transparency mask", /* PHOTOMETRIC_MASK */
43 "separated", /* PHOTOMETRIC_SEPARATED */
44 "YCbCr", /* PHOTOMETRIC_YCBCR */
45 "7 (0x7)",
46 "CIE L*a*b*", /* PHOTOMETRIC_CIELAB */
47 };
48 #define NPHOTONAMES (sizeof (photoNames) / sizeof (photoNames[0]))
49
50 static const char *orientNames[] = {
51 "0 (0x0)",
52 "row 0 top, col 0 lhs", /* ORIENTATION_TOPLEFT */
53 "row 0 top, col 0 rhs", /* ORIENTATION_TOPRIGHT */
54 "row 0 bottom, col 0 rhs", /* ORIENTATION_BOTRIGHT */
55 "row 0 bottom, col 0 lhs", /* ORIENTATION_BOTLEFT */
56 "row 0 lhs, col 0 top", /* ORIENTATION_LEFTTOP */
57 "row 0 rhs, col 0 top", /* ORIENTATION_RIGHTTOP */
58 "row 0 rhs, col 0 bottom", /* ORIENTATION_RIGHTBOT */
59 "row 0 lhs, col 0 bottom", /* ORIENTATION_LEFTBOT */
60 };
61 #define NORIENTNAMES (sizeof (orientNames) / sizeof (orientNames[0]))
62
63 static void
64 _TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip,
65 uint32 value_count, void *raw_data)
66 {
67 uint32 j;
68
69 fprintf(fd, " %s: ", fip->field_name);
70
71 for(j = 0; j < value_count; j++) {
72 if(fip->field_type == TIFF_BYTE)
73 fprintf(fd, "%u", ((uint8 *) raw_data)[j]);
74 else if(fip->field_type == TIFF_UNDEFINED)
75 fprintf(fd, "0x%x",
76 (unsigned int) ((unsigned char *) raw_data)[j]);
77 else if(fip->field_type == TIFF_SBYTE)
78 fprintf(fd, "%d", ((int8 *) raw_data)[j]);
79 else if(fip->field_type == TIFF_SHORT)
80 fprintf(fd, "%u", ((uint16 *) raw_data)[j]);
81 else if(fip->field_type == TIFF_SSHORT)
82 fprintf(fd, "%d", ((int16 *) raw_data)[j]);
83 else if(fip->field_type == TIFF_LONG)
84 fprintf(fd, "%lu",
85 (unsigned long)((uint32 *) raw_data)[j]);
86 else if(fip->field_type == TIFF_SLONG)
87 fprintf(fd, "%ld", (long)((int32 *) raw_data)[j]);
88 else if(fip->field_type == TIFF_RATIONAL
89 || fip->field_type == TIFF_SRATIONAL
90 || fip->field_type == TIFF_FLOAT)
91 fprintf(fd, "%f", ((float *) raw_data)[j]);
92 else if(fip->field_type == TIFF_IFD)
93 fprintf(fd, "0x%ulx", ((uint32 *) raw_data)[j]);
94 else if(fip->field_type == TIFF_ASCII) {
95 fprintf(fd, "%s", (char *) raw_data);
96 break;
97 }
98 else if(fip->field_type == TIFF_DOUBLE)
99 fprintf(fd, "%f", ((double *) raw_data)[j]);
100 else if(fip->field_type == TIFF_FLOAT)
101 fprintf(fd, "%f", ((float *)raw_data)[j]);
102 else {
103 fprintf(fd, "<unsupported data type in TIFFPrint>");
104 break;
105 }
106
107 if(j < value_count - 1)
108 fprintf(fd, ",");
109 }
110
111 fprintf(fd, "\n");
112 }
113
114 static int
115 _TIFFPrettyPrintField(TIFF* tif, FILE* fd, ttag_t tag,
116 uint32 value_count, void *raw_data)
117 {
118 TIFFDirectory *td = &tif->tif_dir;
119
120 switch (tag)
121 {
122 case TIFFTAG_INKSET:
123 fprintf(fd, " Ink Set: ");
124 switch (*((uint16*)raw_data)) {
125 case INKSET_CMYK:
126 fprintf(fd, "CMYK\n");
127 break;
128 default:
129 fprintf(fd, "%u (0x%x)\n",
130 *((uint16*)raw_data),
131 *((uint16*)raw_data));
132 break;
133 }
134 return 1;
135 case TIFFTAG_DOTRANGE:
136 fprintf(fd, " Dot Range: %u-%u\n",
137 ((uint16*)raw_data)[0], ((uint16*)raw_data)[1]);
138 return 1;
139 case TIFFTAG_WHITEPOINT:
140 fprintf(fd, " White Point: %g-%g\n",
141 ((float *)raw_data)[0], ((float *)raw_data)[1]); return 1;
142 case TIFFTAG_REFERENCEBLACKWHITE:
143 {
144 uint16 i;
145
146 fprintf(fd, " Reference Black/White:\n");
147 for (i = 0; i < 3; i++)
148 fprintf(fd, " %2d: %5g %5g\n", i,
149 ((float *)raw_data)[2*i+0],
150 ((float *)raw_data)[2*i+1]);
151 return 1;
152 }
153 case TIFFTAG_XMLPACKET:
154 {
155 uint32 i;
156
157 fprintf(fd, " XMLPacket (XMP Metadata):\n" );
158 for(i = 0; i < value_count; i++)
159 fputc(((char *)raw_data)[i], fd);
160 fprintf( fd, "\n" );
161 return 1;
162 }
163 case TIFFTAG_RICHTIFFIPTC:
164 /*
165 * XXX: for some weird reason RichTIFFIPTC tag
166 * defined as array of LONG values.
167 */
168 fprintf(fd,
169 " RichTIFFIPTC Data: <present>, %lu bytes\n",
170 (unsigned long) value_count * 4);
171 return 1;
172 case TIFFTAG_PHOTOSHOP:
173 fprintf(fd, " Photoshop Data: <present>, %lu bytes\n",
174 (unsigned long) value_count);
175 return 1;
176 case TIFFTAG_ICCPROFILE:
177 fprintf(fd, " ICC Profile: <present>, %lu bytes\n",
178 (unsigned long) value_count);
179 return 1;
180 case TIFFTAG_STONITS:
181 fprintf(fd,
182 " Sample to Nits conversion factor: %.4e\n",
183 *((double*)raw_data));
184 return 1;
185 }
186
187 return 0;
188 }
189
190 /*
191 * Print the contents of the current directory
192 * to the specified stdio file stream.
193 */
194 void
195 TIFFPrintDirectory(TIFF* tif, FILE* fd, long flags)
196 {
197 TIFFDirectory *td = &tif->tif_dir;
198 char *sep;
199 uint16 i;
200 long l, n;
201
202 fprintf(fd, "TIFF Directory at offset 0x%lx (%lu)\n",
203 (unsigned long)tif->tif_diroff, (unsigned long)tif->tif_diroff);
204 if (TIFFFieldSet(tif,FIELD_SUBFILETYPE)) {
205 fprintf(fd, " Subfile Type:");
206 sep = " ";
207 if (td->td_subfiletype & FILETYPE_REDUCEDIMAGE) {
208 fprintf(fd, "%sreduced-resolution image", sep);
209 sep = "/";
210 }
211 if (td->td_subfiletype & FILETYPE_PAGE) {
212 fprintf(fd, "%smulti-page document", sep);
213 sep = "/";
214 }
215 if (td->td_subfiletype & FILETYPE_MASK)
216 fprintf(fd, "%stransparency mask", sep);
217 fprintf(fd, " (%lu = 0x%lx)\n",
218 (long) td->td_subfiletype, (long) td->td_subfiletype);
219 }
220 if (TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS)) {
221 fprintf(fd, " Image Width: %lu Image Length: %lu",
222 (unsigned long) td->td_imagewidth, (unsigned long) td->td_imagelength);
223 if (TIFFFieldSet(tif,FIELD_IMAGEDEPTH))
224 fprintf(fd, " Image Depth: %lu",
225 (unsigned long) td->td_imagedepth);
226 fprintf(fd, "\n");
227 }
228 if (TIFFFieldSet(tif,FIELD_TILEDIMENSIONS)) {
229 fprintf(fd, " Tile Width: %lu Tile Length: %lu",
230 (unsigned long) td->td_tilewidth, (unsigned long) td->td_tilelength);
231 if (TIFFFieldSet(tif,FIELD_TILEDEPTH))
232 fprintf(fd, " Tile Depth: %lu",
233 (unsigned long) td->td_tiledepth);
234 fprintf(fd, "\n");
235 }
236 if (TIFFFieldSet(tif,FIELD_RESOLUTION)) {
237 fprintf(fd, " Resolution: %g, %g",
238 td->td_xresolution, td->td_yresolution);
239 if (TIFFFieldSet(tif,FIELD_RESOLUTIONUNIT)) {
240 switch (td->td_resolutionunit) {
241 case RESUNIT_NONE:
242 fprintf(fd, " (unitless)");
243 break;
244 case RESUNIT_INCH:
245 fprintf(fd, " pixels/inch");
246 break;
247 case RESUNIT_CENTIMETER:
248 fprintf(fd, " pixels/cm");
249 break;
250 default:
251 fprintf(fd, " (unit %u = 0x%x)",
252 td->td_resolutionunit,
253 td->td_resolutionunit);
254 break;
255 }
256 }
257 fprintf(fd, "\n");
258 }
259 if (TIFFFieldSet(tif,FIELD_POSITION))
260 fprintf(fd, " Position: %g, %g\n",
261 td->td_xposition, td->td_yposition);
262 if (TIFFFieldSet(tif,FIELD_BITSPERSAMPLE))
263 fprintf(fd, " Bits/Sample: %u\n", td->td_bitspersample);
264 if (TIFFFieldSet(tif,FIELD_SAMPLEFORMAT)) {
265 fprintf(fd, " Sample Format: ");
266 switch (td->td_sampleformat) {
267 case SAMPLEFORMAT_VOID:
268 fprintf(fd, "void\n");
269 break;
270 case SAMPLEFORMAT_INT:
271 fprintf(fd, "signed integer\n");
272 break;
273 case SAMPLEFORMAT_UINT:
274 fprintf(fd, "unsigned integer\n");
275 break;
276 case SAMPLEFORMAT_IEEEFP:
277 fprintf(fd, "IEEE floating point\n");
278 break;
279 case SAMPLEFORMAT_COMPLEXINT:
280 fprintf(fd, "complex signed integer\n");
281 break;
282 case SAMPLEFORMAT_COMPLEXIEEEFP:
283 fprintf(fd, "complex IEEE floating point\n");
284 break;
285 default:
286 fprintf(fd, "%u (0x%x)\n",
287 td->td_sampleformat, td->td_sampleformat);
288 break;
289 }
290 }
291 if (TIFFFieldSet(tif,FIELD_COMPRESSION)) {
292 const TIFFCodec* c = TIFFFindCODEC(td->td_compression);
293 fprintf(fd, " Compression Scheme: ");
294 if (c)
295 fprintf(fd, "%s\n", c->name);
296 else
297 fprintf(fd, "%u (0x%x)\n",
298 td->td_compression, td->td_compression);
299 }
300 if (TIFFFieldSet(tif,FIELD_PHOTOMETRIC)) {
301 fprintf(fd, " Photometric Interpretation: ");
302 if (td->td_photometric < NPHOTONAMES)
303 fprintf(fd, "%s\n", photoNames[td->td_photometric]);
304 else {
305 switch (td->td_photometric) {
306 case PHOTOMETRIC_LOGL:
307 fprintf(fd, "CIE Log2(L)\n");
308 break;
309 case PHOTOMETRIC_LOGLUV:
310 fprintf(fd, "CIE Log2(L) (u',v')\n");
311 break;
312 default:
313 fprintf(fd, "%u (0x%x)\n",
314 td->td_photometric, td->td_photometric);
315 break;
316 }
317 }
318 }
319 if (TIFFFieldSet(tif,FIELD_EXTRASAMPLES) && td->td_extrasamples) {
320 fprintf(fd, " Extra Samples: %u<", td->td_extrasamples);
321 sep = "";
322 for (i = 0; i < td->td_extrasamples; i++) {
323 switch (td->td_sampleinfo[i]) {
324 case EXTRASAMPLE_UNSPECIFIED:
325 fprintf(fd, "%sunspecified", sep);
326 break;
327 case EXTRASAMPLE_ASSOCALPHA:
328 fprintf(fd, "%sassoc-alpha", sep);
329 break;
330 case EXTRASAMPLE_UNASSALPHA:
331 fprintf(fd, "%sunassoc-alpha", sep);
332 break;
333 default:
334 fprintf(fd, "%s%u (0x%x)", sep,
335 td->td_sampleinfo[i], td->td_sampleinfo[i]);
336 break;
337 }
338 sep = ", ";
339 }
340 fprintf(fd, ">\n");
341 }
342 if (TIFFFieldSet(tif,FIELD_INKNAMES)) {
343 char* cp;
344 fprintf(fd, " Ink Names: ");
345 i = td->td_samplesperpixel;
346 sep = "";
347 for (cp = td->td_inknames; i > 0; cp = strchr(cp,'\0')+1, i--) {
348 fputs(sep, fd);
349 _TIFFprintAscii(fd, cp);
350 sep = ", ";
351 }
352 fputs("\n", fd);
353 }
354 if (TIFFFieldSet(tif,FIELD_THRESHHOLDING)) {
355 fprintf(fd, " Thresholding: ");
356 switch (td->td_threshholding) {
357 case THRESHHOLD_BILEVEL:
358 fprintf(fd, "bilevel art scan\n");
359 break;
360 case THRESHHOLD_HALFTONE:
361 fprintf(fd, "halftone or dithered scan\n");
362 break;
363 case THRESHHOLD_ERRORDIFFUSE:
364 fprintf(fd, "error diffused\n");
365 break;
366 default:
367 fprintf(fd, "%u (0x%x)\n",
368 td->td_threshholding, td->td_threshholding);
369 break;
370 }
371 }
372 if (TIFFFieldSet(tif,FIELD_FILLORDER)) {
373 fprintf(fd, " FillOrder: ");
374 switch (td->td_fillorder) {
375 case FILLORDER_MSB2LSB:
376 fprintf(fd, "msb-to-lsb\n");
377 break;
378 case FILLORDER_LSB2MSB:
379 fprintf(fd, "lsb-to-msb\n");
380 break;
381 default:
382 fprintf(fd, "%u (0x%x)\n",
383 td->td_fillorder, td->td_fillorder);
384 break;
385 }
386 }
387 if (TIFFFieldSet(tif,FIELD_YCBCRSUBSAMPLING))
388 {
389 /*
390 * For hacky reasons (see tif_jpeg.c - JPEGFixupTestSubsampling),
391 * we need to fetch this rather than trust what is in our
392 * structures.
393 */
394 uint16 subsampling[2];
395
396 TIFFGetField( tif, TIFFTAG_YCBCRSUBSAMPLING,
397 subsampling + 0, subsampling + 1 );
398 fprintf(fd, " YCbCr Subsampling: %u, %u\n",
399 subsampling[0], subsampling[1] );
400 }
401 if (TIFFFieldSet(tif,FIELD_YCBCRPOSITIONING)) {
402 fprintf(fd, " YCbCr Positioning: ");
403 switch (td->td_ycbcrpositioning) {
404 case YCBCRPOSITION_CENTERED:
405 fprintf(fd, "centered\n");
406 break;
407 case YCBCRPOSITION_COSITED:
408 fprintf(fd, "cosited\n");
409 break;
410 default:
411 fprintf(fd, "%u (0x%x)\n",
412 td->td_ycbcrpositioning, td->td_ycbcrpositioning);
413 break;
414 }
415 }
416 if (TIFFFieldSet(tif,FIELD_HALFTONEHINTS))
417 fprintf(fd, " Halftone Hints: light %u dark %u\n",
418 td->td_halftonehints[0], td->td_halftonehints[1]);
419 if (TIFFFieldSet(tif,FIELD_ORIENTATION)) {
420 fprintf(fd, " Orientation: ");
421 if (td->td_orientation < NORIENTNAMES)
422 fprintf(fd, "%s\n", orientNames[td->td_orientation]);
423 else
424 fprintf(fd, "%u (0x%x)\n",
425 td->td_orientation, td->td_orientation);
426 }
427 if (TIFFFieldSet(tif,FIELD_SAMPLESPERPIXEL))
428 fprintf(fd, " Samples/Pixel: %u\n", td->td_samplesperpixel);
429 if (TIFFFieldSet(tif,FIELD_ROWSPERSTRIP)) {
430 fprintf(fd, " Rows/Strip: ");
431 if (td->td_rowsperstrip == (uint32) -1)
432 fprintf(fd, "(infinite)\n");
433 else
434 fprintf(fd, "%lu\n", (unsigned long) td->td_rowsperstrip);
435 }
436 if (TIFFFieldSet(tif,FIELD_MINSAMPLEVALUE))
437 fprintf(fd, " Min Sample Value: %u\n", td->td_minsamplevalue);
438 if (TIFFFieldSet(tif,FIELD_MAXSAMPLEVALUE))
439 fprintf(fd, " Max Sample Value: %u\n", td->td_maxsamplevalue);
440 if (TIFFFieldSet(tif,FIELD_SMINSAMPLEVALUE))
441 fprintf(fd, " SMin Sample Value: %g\n",
442 td->td_sminsamplevalue);
443 if (TIFFFieldSet(tif,FIELD_SMAXSAMPLEVALUE))
444 fprintf(fd, " SMax Sample Value: %g\n",
445 td->td_smaxsamplevalue);
446 if (TIFFFieldSet(tif,FIELD_PLANARCONFIG)) {
447 fprintf(fd, " Planar Configuration: ");
448 switch (td->td_planarconfig) {
449 case PLANARCONFIG_CONTIG:
450 fprintf(fd, "single image plane\n");
451 break;
452 case PLANARCONFIG_SEPARATE:
453 fprintf(fd, "separate image planes\n");
454 break;
455 default:
456 fprintf(fd, "%u (0x%x)\n",
457 td->td_planarconfig, td->td_planarconfig);
458 break;
459 }
460 }
461 if (TIFFFieldSet(tif,FIELD_PAGENUMBER))
462 fprintf(fd, " Page Number: %u-%u\n",
463 td->td_pagenumber[0], td->td_pagenumber[1]);
464 if (TIFFFieldSet(tif,FIELD_COLORMAP)) {
465 fprintf(fd, " Color Map: ");
466 if (flags & TIFFPRINT_COLORMAP) {
467 fprintf(fd, "\n");
468 n = 1L<<td->td_bitspersample;
469 for (l = 0; l < n; l++)
470 fprintf(fd, " %5lu: %5u %5u %5u\n",
471 l,
472 td->td_colormap[0][l],
473 td->td_colormap[1][l],
474 td->td_colormap[2][l]);
475 } else
476 fprintf(fd, "(present)\n");
477 }
478 if (TIFFFieldSet(tif,FIELD_TRANSFERFUNCTION)) {
479 fprintf(fd, " Transfer Function: ");
480 if (flags & TIFFPRINT_CURVES) {
481 fprintf(fd, "\n");
482 n = 1L<<td->td_bitspersample;
483 for (l = 0; l < n; l++) {
484 fprintf(fd, " %2lu: %5u",
485 l, td->td_transferfunction[0][l]);
486 for (i = 1; i < td->td_samplesperpixel; i++)
487 fprintf(fd, " %5u",
488 td->td_transferfunction[i][l]);
489 fputc('\n', fd);
490 }
491 } else
492 fprintf(fd, "(present)\n");
493 }
494 if (TIFFFieldSet(tif, FIELD_SUBIFD) && (td->td_subifd)) {
495 fprintf(fd, " SubIFD Offsets:");
496 for (i = 0; i < td->td_nsubifd; i++)
497 fprintf(fd, " %5lu", (long) td->td_subifd[i]);
498 fputc('\n', fd);
499 }
500
501 /*
502 ** Custom tag support.
503 */
504 {
505 int i;
506 short count;
507
508 count = (short) TIFFGetTagListCount(tif);
509 for(i = 0; i < count; i++) {
510 ttag_t tag = TIFFGetTagListEntry(tif, i);
511 const TIFFFieldInfo *fip;
512 uint32 value_count;
513 int mem_alloc = 0;
514 void *raw_data;
515
516 fip = TIFFFieldWithTag(tif, tag);
517 if(fip == NULL)
518 continue;
519
520 if(fip->field_passcount) {
521 if(TIFFGetField(tif, tag, &value_count, &raw_data) != 1)
522 continue;
523 } else {
524 if (fip->field_readcount == TIFF_VARIABLE
525 || fip->field_readcount == TIFF_VARIABLE2)
526 value_count = 1;
527 else if (fip->field_readcount == TIFF_SPP)
528 value_count = td->td_samplesperpixel;
529 else
530 value_count = fip->field_readcount;
531 if ((fip->field_type == TIFF_ASCII
532 || fip->field_readcount == TIFF_VARIABLE
533 || fip->field_readcount == TIFF_VARIABLE2
534 || fip->field_readcount == TIFF_SPP
535 || value_count > 1)
536 && fip->field_tag != TIFFTAG_PAGENUMBER
537 && fip->field_tag != TIFFTAG_HALFTONEHINTS
538 && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING
539 && fip->field_tag != TIFFTAG_DOTRANGE) {
540 if(TIFFGetField(tif, tag, &raw_data) != 1)
541 continue;
542 } else if (fip->field_tag != TIFFTAG_PAGENUMBER
543 && fip->field_tag != TIFFTAG_HALFTONEHINTS
544 && fip->field_tag != TIFFTAG_YCBCRSUBSAMPLING
545 && fip->field_tag != TIFFTAG_DOTRANGE) {
546 raw_data = _TIFFmalloc(
547 _TIFFDataSize(fip->field_type)
548 * value_count);
549 mem_alloc = 1;
550 if(TIFFGetField(tif, tag, raw_data) != 1) {
551 _TIFFfree(raw_data);
552 continue;
553 }
554 } else {
555 /*
556 * XXX: Should be fixed and removed, see the
557 * notes related to TIFFTAG_PAGENUMBER,
558 * TIFFTAG_HALFTONEHINTS,
559 * TIFFTAG_YCBCRSUBSAMPLING and
560 * TIFFTAG_DOTRANGE tags in tif_dir.c. */
561 char *tmp;
562 raw_data = _TIFFmalloc(
563 _TIFFDataSize(fip->field_type)
564 * value_count);
565 tmp = raw_data;
566 mem_alloc = 1;
567 if(TIFFGetField(tif, tag, tmp,
568 tmp + _TIFFDataSize(fip->field_type)) != 1) {
569 _TIFFfree(raw_data);
570 continue;
571 }
572 }
573 }
574
575 /*
576 * Catch the tags which needs to be specially handled and
577 * pretty print them. If tag not handled in
578 * _TIFFPrettyPrintField() fall down and print it as any other
579 * tag.
580 */
581 if (_TIFFPrettyPrintField(tif, fd, tag, value_count, raw_data)) {
582 if(mem_alloc)
583 _TIFFfree(raw_data);
584 continue;
585 }
586 else
587 _TIFFPrintField(fd, fip, value_count, raw_data);
588
589 if(mem_alloc)
590 _TIFFfree(raw_data);
591 }
592 }
593
594 if (tif->tif_tagmethods.printdir)
595 (*tif->tif_tagmethods.printdir)(tif, fd, flags);
596 if ((flags & TIFFPRINT_STRIPS) &&
597 TIFFFieldSet(tif,FIELD_STRIPOFFSETS)) {
598 tstrip_t s;
599
600 fprintf(fd, " %lu %s:\n",
601 (long) td->td_nstrips,
602 isTiled(tif) ? "Tiles" : "Strips");
603 for (s = 0; s < td->td_nstrips; s++)
604 fprintf(fd, " %3lu: [%8lu, %8lu]\n",
605 (unsigned long) s,
606 (unsigned long) td->td_stripoffset[s],
607 (unsigned long) td->td_stripbytecount[s]);
608 }
609 }
610
611 void
612 _TIFFprintAscii(FILE* fd, const char* cp)
613 {
614 for (; *cp != '\0'; cp++) {
615 const char* tp;
616
617 if (isprint((int)*cp)) {
618 fputc(*cp, fd);
619 continue;
620 }
621 for (tp = "\tt\bb\rr\nn\vv"; *tp; tp++)
622 if (*tp++ == *cp)
623 break;
624 if (*tp)
625 fprintf(fd, "\\%c", *tp);
626 else
627 fprintf(fd, "\\%03o", *cp & 0xff);
628 }
629 }
630
631 void
632 _TIFFprintAsciiTag(FILE* fd, const char* name, const char* value)
633 {
634 fprintf(fd, " %s: \"", name);
635 _TIFFprintAscii(fd, value);
636 fprintf(fd, "\"\n");
637 }
638
639 /* vim: set ts=8 sts=8 sw=8 noet: */
640 /*
641 * Local Variables:
642 * mode: c
643 * c-basic-offset: 8
644 * fill-column: 78
645 * End:
646 */
TIFFDirectory::td_pagenumber
uint16 td_pagenumber[2]
Definition: tif_dir.h:59
ttag_t
uint32 ttag_t
Definition: tiffio.h:61
tiff::tif_tagmethods
TIFFTagMethods tif_tagmethods
Definition: tiffiop.h:197
TIFFDirectory::td_threshholding
uint16 td_threshholding
Definition: tif_dir.h:48
TIFF_UNDEFINED
Definition: tiff.h:145
TIFFDirectory::td_imagewidth
uint32 td_imagewidth
Definition: tif_dir.h:41
TIFF_VARIABLE
#define TIFF_VARIABLE
Definition: tiffio.h:297
TIFFDirectory::td_imagedepth
uint32 td_imagedepth
Definition: tif_dir.h:41
_TIFFprintAscii
void _TIFFprintAscii(FILE *fd, const char *cp)
Definition: tif_print.c:612
FIELD_MINSAMPLEVALUE
#define FIELD_MINSAMPLEVALUE
Definition: tif_dir.h:120
FIELD_RESOLUTION
#define FIELD_RESOLUTION
Definition: tif_dir.h:107
TIFFCodec
Definition: tiffio.h:240
TIFFDirectory::td_bitspersample
uint16 td_bitspersample
Definition: tif_dir.h:44
THRESHHOLD_ERRORDIFFUSE
#define THRESHHOLD_ERRORDIFFUSE
Definition: tiff.h:215
TIFFTAG_ICCPROFILE
#define TIFFTAG_ICCPROFILE
Definition: tiff.h:416
TIFFDirectory::td_nsubifd
uint16 td_nsubifd
Definition: tif_dir.h:72
FIELD_STRIPOFFSETS
#define FIELD_STRIPOFFSETS
Definition: tif_dir.h:126
TIFF_LONG
Definition: tiff.h:142
THRESHHOLD_BILEVEL
#define THRESHHOLD_BILEVEL
Definition: tiff.h:213
TIFFPRINT_CURVES
#define TIFFPRINT_CURVES
Definition: tiffio.h:108
TIFFDirectory::td_xresolution
float td_xresolution
Definition: tif_dir.h:55
TIFFDirectory::td_minsamplevalue
uint16 td_minsamplevalue
Definition: tif_dir.h:53
FIELD_IMAGEDIMENSIONS
#define FIELD_IMAGEDIMENSIONS
Definition: tif_dir.h:105
TIFF_BYTE
Definition: tiff.h:139
FIELD_THRESHHOLDING
#define FIELD_THRESHHOLDING
Definition: tif_dir.h:115
YCBCRPOSITION_COSITED
#define YCBCRPOSITION_COSITED
Definition: tiff.h:349
TIFF_ASCII
Definition: tiff.h:140
PHOTOMETRIC_LOGL
#define PHOTOMETRIC_LOGL
Definition: tiff.h:210
FILLORDER_LSB2MSB
#define FILLORDER_LSB2MSB
Definition: tiff.h:220
uint8
unsigned char uint8
Definition: tiff.h:67
TIFFDirectory::td_transferfunction
uint16 * td_transferfunction[3]
Definition: tif_dir.h:79
int8
signed char int8
Definition: tiff.h:65
TIFFPrintDirectory
void TIFFPrintDirectory(TIFF *tif, FILE *fd, long flags)
Definition: tif_print.c:195
FIELD_HALFTONEHINTS
#define FIELD_HALFTONEHINTS
Definition: tif_dir.h:134
PHOTOMETRIC_LOGLUV
#define PHOTOMETRIC_LOGLUV
Definition: tiff.h:211
TIFFTAG_DOTRANGE
#define TIFFTAG_DOTRANGE
Definition: tiff.h:305
tstrip_t
tstrile_t tstrip_t
Definition: tiffio.h:65
TIFFPRINT_COLORMAP
#define TIFFPRINT_COLORMAP
Definition: tiffio.h:109
TIFFDirectory::td_subfiletype
uint32 td_subfiletype
Definition: tif_dir.h:43
TIFFTAG_YCBCRSUBSAMPLING
#define TIFFTAG_YCBCRSUBSAMPLING
Definition: tiff.h:346
FIELD_RESOLUTIONUNIT
#define FIELD_RESOLUTIONUNIT
Definition: tif_dir.h:123
TIFFTAG_REFERENCEBLACKWHITE
#define TIFFTAG_REFERENCEBLACKWHITE
Definition: tiff.h:350
tiffiop.h
TIFF_SRATIONAL
Definition: tiff.h:148
TIFFDirectory::td_xposition
float td_xposition
Definition: tif_dir.h:58
tiff
Definition: tiffiop.h:102
FIELD_YCBCRSUBSAMPLING
#define FIELD_YCBCRSUBSAMPLING
Definition: tif_dir.h:135
SAMPLEFORMAT_INT
#define SAMPLEFORMAT_INT
Definition: tiff.h:313
FIELD_SMAXSAMPLEVALUE
#define FIELD_SMAXSAMPLEVALUE
Definition: tif_dir.h:131
RESUNIT_INCH
#define RESUNIT_INCH
Definition: tiff.h:267
FIELD_SUBIFD
#define FIELD_SUBIFD
Definition: tif_dir.h:140
TIFFDirectory::td_extrasamples
uint16 td_extrasamples
Definition: tif_dir.h:62
FIELD_TRANSFERFUNCTION
#define FIELD_TRANSFERFUNCTION
Definition: tif_dir.h:138
FIELD_FILLORDER
#define FIELD_FILLORDER
Definition: tif_dir.h:116
FIELD_MAXSAMPLEVALUE
#define FIELD_MAXSAMPLEVALUE
Definition: tif_dir.h:121
TIFFCodec::name
char * name
Definition: tiffio.h:241
INKSET_CMYK
#define INKSET_CMYK
Definition: tiff.h:301
TIFFTagMethods::printdir
TIFFPrintMethod printdir
Definition: tiffio.h:334
FIELD_BITSPERSAMPLE
#define FIELD_BITSPERSAMPLE
Definition: tif_dir.h:112
_TIFFprintAsciiTag
void _TIFFprintAsciiTag(FILE *fd, const char *name, const char *value)
Definition: tif_print.c:632
NPHOTONAMES
#define NPHOTONAMES
Definition: tif_print.c:48
TIFFDirectory::td_orientation
uint16 td_orientation
Definition: tif_dir.h:50
YCBCRPOSITION_CENTERED
#define YCBCRPOSITION_CENTERED
Definition: tiff.h:348
TIFFDirectory::td_sampleinfo
uint16 * td_sampleinfo
Definition: tif_dir.h:63
TIFFFieldInfo::field_passcount
unsigned char field_passcount
Definition: tiffio.h:310
TIFFDirectory::td_tilewidth
uint32 td_tilewidth
Definition: tif_dir.h:42
FIELD_PLANARCONFIG
#define FIELD_PLANARCONFIG
Definition: tif_dir.h:122
TIFF_SSHORT
Definition: tiff.h:146
TIFFDirectory::td_tilelength
uint32 td_tilelength
Definition: tif_dir.h:42
SAMPLEFORMAT_VOID
#define SAMPLEFORMAT_VOID
Definition: tiff.h:315
TIFFDirectory::td_stripoffset
toff_t * td_stripoffset
Definition: tif_dir.h:69
TIFFDirectory::td_nstrips
tstrile_t td_nstrips
Definition: tif_dir.h:68
TIFFTAG_XMLPACKET
#define TIFFTAG_XMLPACKET
Definition: tiff.h:351
SAMPLEFORMAT_COMPLEXIEEEFP
#define SAMPLEFORMAT_COMPLEXIEEEFP
Definition: tiff.h:317
uint16
unsigned short uint16
Definition: tiff.h:71
SAMPLEFORMAT_UINT
#define SAMPLEFORMAT_UINT
Definition: tiff.h:312
TIFFFieldInfo
Definition: tiffio.h:303
TIFFDirectory::td_colormap
uint16 * td_colormap[3]
Definition: tif_dir.h:60
RESUNIT_CENTIMETER
#define RESUNIT_CENTIMETER
Definition: tiff.h:268
TIFFDirectory::td_imagelength
uint32 td_imagelength
Definition: tif_dir.h:41
SAMPLEFORMAT_IEEEFP
#define SAMPLEFORMAT_IEEEFP
Definition: tiff.h:314
TIFFDirectory::td_subifd
uint32 * td_subifd
Definition: tif_dir.h:73
TIFFTAG_HALFTONEHINTS
#define TIFFTAG_HALFTONEHINTS
Definition: tiff.h:288
TIFFDirectory::td_rowsperstrip
uint32 td_rowsperstrip
Definition: tif_dir.h:52
TIFFDirectory::td_yposition
float td_yposition
Definition: tif_dir.h:58
TIFFDirectory::td_maxsamplevalue
uint16 td_maxsamplevalue
Definition: tif_dir.h:53
TIFFDirectory
Definition: tif_dir.h:36
FIELD_PHOTOMETRIC
#define FIELD_PHOTOMETRIC
Definition: tif_dir.h:114
TIFFDirectory::td_halftonehints
uint16 td_halftonehints[2]
Definition: tif_dir.h:61
TIFFDirectory::td_planarconfig
uint16 td_planarconfig
Definition: tif_dir.h:57
NORIENTNAMES
#define NORIENTNAMES
Definition: tif_print.c:61
TIFFFieldInfo::field_readcount
short field_readcount
Definition: tiffio.h:305
EXTRASAMPLE_UNASSALPHA
#define EXTRASAMPLE_UNASSALPHA
Definition: tiff.h:310
TIFFFieldSet
#define TIFFFieldSet(tif, field)
Definition: tif_dir.h:172
TIFFTAG_PAGENUMBER
#define TIFFTAG_PAGENUMBER
Definition: tiff.h:269
FIELD_COMPRESSION
#define FIELD_COMPRESSION
Definition: tif_dir.h:113
FIELD_SMINSAMPLEVALUE
#define FIELD_SMINSAMPLEVALUE
Definition: tif_dir.h:130
FIELD_ROWSPERSTRIP
#define FIELD_ROWSPERSTRIP
Definition: tif_dir.h:119
TIFFGetTagListEntry
ttag_t TIFFGetTagListEntry(TIFF *tif, int tag_index)
Definition: tif_extension.c:44
TIFFDirectory::td_smaxsamplevalue
double td_smaxsamplevalue
Definition: tif_dir.h:54
FIELD_INKNAMES
#define FIELD_INKNAMES
Definition: tif_dir.h:139
TIFFTAG_WHITEPOINT
#define TIFFTAG_WHITEPOINT
Definition: tiff.h:285
TIFFFindCODEC
const TIFFCodec * TIFFFindCODEC(uint16 scheme)
Definition: tif_compress.c:179
FIELD_ORIENTATION
#define FIELD_ORIENTATION
Definition: tif_dir.h:117
TIFFTAG_INKSET
#define TIFFTAG_INKSET
Definition: tiff.h:300
PLANARCONFIG_SEPARATE
#define PLANARCONFIG_SEPARATE
Definition: tiff.h:244
TIFF_SBYTE
Definition: tiff.h:144
FILETYPE_REDUCEDIMAGE
#define FILETYPE_REDUCEDIMAGE
Definition: tiff.h:158
FIELD_IMAGEDEPTH
#define FIELD_IMAGEDEPTH
Definition: tif_dir.h:132
isTiled
#define isTiled(tif)
Definition: tiffiop.h:203
FILETYPE_PAGE
#define FILETYPE_PAGE
Definition: tiff.h:159
TIFF_RATIONAL
Definition: tiff.h:143
TIFFDirectory::td_samplesperpixel
uint16 td_samplesperpixel
Definition: tif_dir.h:51
FIELD_YCBCRPOSITIONING
#define FIELD_YCBCRPOSITIONING
Definition: tif_dir.h:136
TIFFDirectory::td_yresolution
float td_yresolution
Definition: tif_dir.h:55
_TIFFDataSize
int _TIFFDataSize(TIFFDataType type)
Definition: tif_dirinfo.c:697
FIELD_EXTRASAMPLES
#define FIELD_EXTRASAMPLES
Definition: tif_dir.h:128
TIFF_VARIABLE2
#define TIFF_VARIABLE2
Definition: tiffio.h:299
TIFFDirectory::td_inknames
char * td_inknames
Definition: tif_dir.h:82
TIFFTAG_STONITS
#define TIFFTAG_STONITS
Definition: tiff.h:426
TIFFDirectory::td_sminsamplevalue
double td_sminsamplevalue
Definition: tif_dir.h:54
TIFF_SLONG
Definition: tiff.h:147
int16
short int16
Definition: tiff.h:69
TIFFDirectory::td_tiledepth
uint32 td_tiledepth
Definition: tif_dir.h:42
TIFF_SPP
#define TIFF_SPP
Definition: tiffio.h:298
TIFFDirectory::td_ycbcrpositioning
uint16 td_ycbcrpositioning
Definition: tif_dir.h:76
TIFFGetTagListCount
int TIFFGetTagListCount(TIFF *tif)
Definition: tif_extension.c:36
FIELD_POSITION
#define FIELD_POSITION
Definition: tif_dir.h:108
TIFF_FLOAT
Definition: tiff.h:149
TIFF_DOUBLE
Definition: tiff.h:150
tiff::tif_dir
TIFFDirectory tif_dir
Definition: tiffiop.h:133
EXTRASAMPLE_UNSPECIFIED
#define EXTRASAMPLE_UNSPECIFIED
Definition: tiff.h:308
FIELD_PAGENUMBER
#define FIELD_PAGENUMBER
Definition: tif_dir.h:124
FIELD_TILEDEPTH
#define FIELD_TILEDEPTH
Definition: tif_dir.h:133
TIFFFieldWithTag
const TIFFFieldInfo * TIFFFieldWithTag(TIFF *, ttag_t)
FIELD_TILEDIMENSIONS
#define FIELD_TILEDIMENSIONS
Definition: tif_dir.h:106
TIFFFieldInfo::field_tag
ttag_t field_tag
Definition: tiffio.h:304
TIFFDirectory::td_compression
uint16 td_compression
Definition: tif_dir.h:46
TIFFTAG_RICHTIFFIPTC
#define TIFFTAG_RICHTIFFIPTC
Definition: tiff.h:389
SAMPLEFORMAT_COMPLEXINT
#define SAMPLEFORMAT_COMPLEXINT
Definition: tiff.h:316
FILETYPE_MASK
#define FILETYPE_MASK
Definition: tiff.h:160
_TIFFmalloc
void * _TIFFmalloc(tsize_t s)
Definition: tif_acorn.c:461
FIELD_COLORMAP
#define FIELD_COLORMAP
Definition: tif_dir.h:127
FIELD_SAMPLESPERPIXEL
#define FIELD_SAMPLESPERPIXEL
Definition: tif_dir.h:118
TIFFFieldInfo::field_name
char * field_name
Definition: tiffio.h:311
TIFFDirectory::td_sampleformat
uint16 td_sampleformat
Definition: tif_dir.h:45
TIFFGetField
int TIFFGetField(TIFF *tif, ttag_t tag,...)
Definition: tif_dir.c:951
TIFFFieldInfo::field_type
TIFFDataType field_type
Definition: tiffio.h:307
RESUNIT_NONE
#define RESUNIT_NONE
Definition: tiff.h:266
TIFF_SHORT
Definition: tiff.h:141
TIFFDirectory::td_resolutionunit
uint16 td_resolutionunit
Definition: tif_dir.h:56
TIFFDirectory::td_stripbytecount
toff_t * td_stripbytecount
Definition: tif_dir.h:70
_TIFFfree
void _TIFFfree(tdata_t p)
Definition: tif_acorn.c:467
TIFF_IFD
Definition: tiff.h:151
TIFFPRINT_STRIPS
#define TIFFPRINT_STRIPS
Definition: tiffio.h:107
EXTRASAMPLE_ASSOCALPHA
#define EXTRASAMPLE_ASSOCALPHA
Definition: tiff.h:309
FIELD_SAMPLEFORMAT
#define FIELD_SAMPLEFORMAT
Definition: tif_dir.h:129
THRESHHOLD_HALFTONE
#define THRESHHOLD_HALFTONE
Definition: tiff.h:214
FILLORDER_MSB2LSB
#define FILLORDER_MSB2LSB
Definition: tiff.h:219
TIFFTAG_PHOTOSHOP
#define TIFFTAG_PHOTOSHOP
Definition: tiff.h:412
PLANARCONFIG_CONTIG
#define PLANARCONFIG_CONTIG
Definition: tiff.h:243
FIELD_SUBFILETYPE
#define FIELD_SUBFILETYPE
Definition: tif_dir.h:111
tiff::tif_diroff
toff_t tif_diroff
Definition: tiffiop.h:127
TIFFDirectory::td_photometric
uint16 td_photometric
Definition: tif_dir.h:47
TIFFDirectory::td_fillorder
uint16 td_fillorder
Definition: tif_dir.h:49