tif_print.c

来自「奇趣公司比较新的qt/emd版本」· C语言 代码 · 共 640 行 · 第 1/2 页

C
640
字号
/* $Id: tif_print.c,v 1.35 2006/03/13 07:53:28 dron Exp $ *//* * Copyright (c) 1988-1997 Sam Leffler * Copyright (c) 1991-1997 Silicon Graphics, Inc. * * Permission to use, copy, modify, distribute, and sell this software and  * its documentation for any purpose is hereby granted without fee, provided * that (i) the above copyright notices and this permission notice appear in * all copies of the software and related documentation, and (ii) the names of * Sam Leffler and Silicon Graphics may not be used in any advertising or * publicity relating to the software without the specific, prior written * permission of Sam Leffler and Silicon Graphics. *  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.   *  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  * OF THIS SOFTWARE. *//* * TIFF Library. * * Directory Printing Support */#include "tiffiop.h"#include <stdio.h>#include <ctype.h>static const char *photoNames[] = {    "min-is-white",				/* PHOTOMETRIC_MINISWHITE */    "min-is-black",				/* PHOTOMETRIC_MINISBLACK */    "RGB color",				/* PHOTOMETRIC_RGB */    "palette color (RGB from colormap)",	/* PHOTOMETRIC_PALETTE */    "transparency mask",			/* PHOTOMETRIC_MASK */    "separated",				/* PHOTOMETRIC_SEPARATED */    "YCbCr",					/* PHOTOMETRIC_YCBCR */    "7 (0x7)",    "CIE L*a*b*",				/* PHOTOMETRIC_CIELAB */};#define	NPHOTONAMES	(sizeof (photoNames) / sizeof (photoNames[0]))static const char *orientNames[] = {    "0 (0x0)",    "row 0 top, col 0 lhs",			/* ORIENTATION_TOPLEFT */    "row 0 top, col 0 rhs",			/* ORIENTATION_TOPRIGHT */    "row 0 bottom, col 0 rhs",			/* ORIENTATION_BOTRIGHT */    "row 0 bottom, col 0 lhs",			/* ORIENTATION_BOTLEFT */    "row 0 lhs, col 0 top",			/* ORIENTATION_LEFTTOP */    "row 0 rhs, col 0 top",			/* ORIENTATION_RIGHTTOP */    "row 0 rhs, col 0 bottom",			/* ORIENTATION_RIGHTBOT */    "row 0 lhs, col 0 bottom",			/* ORIENTATION_LEFTBOT */};#define	NORIENTNAMES	(sizeof (orientNames) / sizeof (orientNames[0]))static void_TIFFPrintField(FILE* fd, const TIFFFieldInfo *fip,		uint32 value_count, void *raw_data){	uint32 j;			fprintf(fd, "  %s: ", fip->field_name);	for(j = 0; j < value_count; j++) {		if(fip->field_type == TIFF_BYTE)			fprintf(fd, "%u", ((uint8 *) raw_data)[j]);		else if(fip->field_type == TIFF_UNDEFINED)			fprintf(fd, "0x%x",				(unsigned int) ((unsigned char *) raw_data)[j]);		else if(fip->field_type == TIFF_SBYTE)			fprintf(fd, "%d", ((int8 *) raw_data)[j]);		else if(fip->field_type == TIFF_SHORT)			fprintf(fd, "%u", ((uint16 *) raw_data)[j]);		else if(fip->field_type == TIFF_SSHORT)			fprintf(fd, "%d", ((int16 *) raw_data)[j]);		else if(fip->field_type == TIFF_LONG)			fprintf(fd, "%lu",				(unsigned long)((uint32 *) raw_data)[j]);		else if(fip->field_type == TIFF_SLONG)			fprintf(fd, "%ld", (long)((int32 *) raw_data)[j]);		else if(fip->field_type == TIFF_RATIONAL			|| fip->field_type == TIFF_SRATIONAL			|| fip->field_type == TIFF_FLOAT)			fprintf(fd, "%f", ((float *) raw_data)[j]);		else if(fip->field_type == TIFF_IFD)			fprintf(fd, "0x%ulx", ((uint32 *) raw_data)[j]);		else if(fip->field_type == TIFF_ASCII) {			fprintf(fd, "%s", (char *) raw_data);			break;		}		else if(fip->field_type == TIFF_DOUBLE)			fprintf(fd, "%f", ((double *) raw_data)[j]);		else if(fip->field_type == TIFF_FLOAT)			fprintf(fd, "%f", ((float *)raw_data)[j]);		else {			fprintf(fd, "<unsupported data type in TIFFPrint>");			break;		}		if(j < value_count - 1)			fprintf(fd, ",");	}	fprintf(fd, "\n");}static int_TIFFPrettyPrintField(TIFF* tif, FILE* fd, ttag_t tag,		      uint32 value_count, void *raw_data){	TIFFDirectory *td = &tif->tif_dir;	switch (tag)	{		case TIFFTAG_INKSET:			fprintf(fd, "  Ink Set: ");			switch (*((uint16*)raw_data)) {				case INKSET_CMYK:					fprintf(fd, "CMYK\n");					break;				default:					fprintf(fd, "%u (0x%x)\n",						*((uint16*)raw_data),						*((uint16*)raw_data));					break;			}			return 1;		case TIFFTAG_DOTRANGE:			fprintf(fd, "  Dot Range: %u-%u\n",				((uint16*)raw_data)[0], ((uint16*)raw_data)[1]);			return 1;		case TIFFTAG_WHITEPOINT:			fprintf(fd, "  White Point: %g-%g\n",				((float *)raw_data)[0], ((float *)raw_data)[1]);			return 1;		case TIFFTAG_REFERENCEBLACKWHITE:		{			uint16 i;			fprintf(fd, "  Reference Black/White:\n");			for (i = 0; i < td->td_samplesperpixel; i++)			fprintf(fd, "    %2d: %5g %5g\n", i,				((float *)raw_data)[2*i+0],				((float *)raw_data)[2*i+1]);			return 1;		}		case TIFFTAG_XMLPACKET:		{			uint32 i;						fprintf(fd, "  XMLPacket (XMP Metadata):\n" );			for(i = 0; i < value_count; i++)				fputc(((char *)raw_data)[i], fd);			fprintf( fd, "\n" );			return 1;		}		case TIFFTAG_RICHTIFFIPTC:			/*			 * XXX: for some weird reason RichTIFFIPTC tag			 * defined as array of LONG values.			 */			fprintf(fd,				"  RichTIFFIPTC Data: <present>, %lu bytes\n",				(unsigned long) value_count * 4);			return 1;		case TIFFTAG_PHOTOSHOP:			fprintf(fd, "  Photoshop Data: <present>, %lu bytes\n",				(unsigned long) value_count);			return 1;		case TIFFTAG_ICCPROFILE:			fprintf(fd, "  ICC Profile: <present>, %lu bytes\n",				(unsigned long) value_count);			return 1;		case TIFFTAG_STONITS:			fprintf(fd,				"  Sample to Nits conversion factor: %.4e\n",				*((double*)raw_data));			return 1;        }	return 0;}/* * Print the contents of the current directory * to the specified stdio file stream. */voidTIFFPrintDirectory(TIFF* tif, FILE* fd, long flags){	TIFFDirectory *td = &tif->tif_dir;	char *sep;	uint16 i;	long l, n;	fprintf(fd, "TIFF Directory at offset 0x%lx (%lu)\n",		(unsigned long)tif->tif_diroff, (unsigned long)tif->tif_diroff);	if (TIFFFieldSet(tif,FIELD_SUBFILETYPE)) {		fprintf(fd, "  Subfile Type:");		sep = " ";		if (td->td_subfiletype & FILETYPE_REDUCEDIMAGE) {			fprintf(fd, "%sreduced-resolution image", sep);			sep = "/";		}		if (td->td_subfiletype & FILETYPE_PAGE) {			fprintf(fd, "%smulti-page document", sep);			sep = "/";		}		if (td->td_subfiletype & FILETYPE_MASK)			fprintf(fd, "%stransparency mask", sep);		fprintf(fd, " (%lu = 0x%lx)\n",		    (long) td->td_subfiletype, (long) td->td_subfiletype);	}	if (TIFFFieldSet(tif,FIELD_IMAGEDIMENSIONS)) {		fprintf(fd, "  Image Width: %lu Image Length: %lu",		    (unsigned long) td->td_imagewidth, (unsigned long) td->td_imagelength);		if (TIFFFieldSet(tif,FIELD_IMAGEDEPTH))			fprintf(fd, " Image Depth: %lu",			    (unsigned long) td->td_imagedepth);		fprintf(fd, "\n");	}	if (TIFFFieldSet(tif,FIELD_TILEDIMENSIONS)) {		fprintf(fd, "  Tile Width: %lu Tile Length: %lu",		    (unsigned long) td->td_tilewidth, (unsigned long) td->td_tilelength);		if (TIFFFieldSet(tif,FIELD_TILEDEPTH))			fprintf(fd, " Tile Depth: %lu",			    (unsigned long) td->td_tiledepth);		fprintf(fd, "\n");	}	if (TIFFFieldSet(tif,FIELD_RESOLUTION)) {		fprintf(fd, "  Resolution: %g, %g",		    td->td_xresolution, td->td_yresolution);		if (TIFFFieldSet(tif,FIELD_RESOLUTIONUNIT)) {			switch (td->td_resolutionunit) {			case RESUNIT_NONE:				fprintf(fd, " (unitless)");				break;			case RESUNIT_INCH:				fprintf(fd, " pixels/inch");				break;			case RESUNIT_CENTIMETER:				fprintf(fd, " pixels/cm");				break;			default:				fprintf(fd, " (unit %u = 0x%x)",				    td->td_resolutionunit,				    td->td_resolutionunit);				break;			}		}		fprintf(fd, "\n");	}	if (TIFFFieldSet(tif,FIELD_POSITION))		fprintf(fd, "  Position: %g, %g\n",		    td->td_xposition, td->td_yposition);	if (TIFFFieldSet(tif,FIELD_BITSPERSAMPLE))		fprintf(fd, "  Bits/Sample: %u\n", td->td_bitspersample);	if (TIFFFieldSet(tif,FIELD_SAMPLEFORMAT)) {		fprintf(fd, "  Sample Format: ");		switch (td->td_sampleformat) {		case SAMPLEFORMAT_VOID:			fprintf(fd, "void\n");			break;		case SAMPLEFORMAT_INT:			fprintf(fd, "signed integer\n");			break;		case SAMPLEFORMAT_UINT:			fprintf(fd, "unsigned integer\n");			break;		case SAMPLEFORMAT_IEEEFP:			fprintf(fd, "IEEE floating point\n");			break;		case SAMPLEFORMAT_COMPLEXINT:			fprintf(fd, "complex signed integer\n");			break;		case SAMPLEFORMAT_COMPLEXIEEEFP:			fprintf(fd, "complex IEEE floating point\n");			break;		default:			fprintf(fd, "%u (0x%x)\n",			    td->td_sampleformat, td->td_sampleformat);			break;		}	}	if (TIFFFieldSet(tif,FIELD_COMPRESSION)) {		const TIFFCodec* c = TIFFFindCODEC(td->td_compression);		fprintf(fd, "  Compression Scheme: ");		if (c)			fprintf(fd, "%s\n", c->name);		else			fprintf(fd, "%u (0x%x)\n",			    td->td_compression, td->td_compression);	}	if (TIFFFieldSet(tif,FIELD_PHOTOMETRIC)) {		fprintf(fd, "  Photometric Interpretation: ");		if (td->td_photometric < NPHOTONAMES)			fprintf(fd, "%s\n", photoNames[td->td_photometric]);		else {			switch (td->td_photometric) {			case PHOTOMETRIC_LOGL:				fprintf(fd, "CIE Log2(L)\n");				break;			case PHOTOMETRIC_LOGLUV:				fprintf(fd, "CIE Log2(L) (u',v')\n");				break;			default:				fprintf(fd, "%u (0x%x)\n",				    td->td_photometric, td->td_photometric);				break;			}		}	}	if (TIFFFieldSet(tif,FIELD_EXTRASAMPLES) && td->td_extrasamples) {		fprintf(fd, "  Extra Samples: %u<", td->td_extrasamples);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?