⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tif_compress.c

📁 一个国人自己实现图像库的程序(有参考价值)
💻 C
字号:
/* $Header: /cvsroot/osrs/libtiff/libtiff/tif_compress.c,v 1.4 1999/12/21 17:03:03 mwelles 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 * * Compression Scheme Configuration Support. */#include "tiffiop.h"static intTIFFNoEncode(TIFF* tif, char* method){	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);	if (c) { 	  if (! strncmp(c->name, "LZW", 3) ){ 	    TIFFError(tif->tif_name, 		      "%s %s encoding is no longer implemented due to Unisys patent enforcement", 		      c->name, method); 	  } else { 	    TIFFError(tif->tif_name, "%s %s encoding is not implemented",		      c->name, method);	  }	}	else { 		TIFFError(tif->tif_name,			  "Compression scheme %u %s encoding is not implemented",		    tif->tif_dir.td_compression, method);	}	return (-1);}int_TIFFNoRowEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s){	(void) pp; (void) cc; (void) s;	return (TIFFNoEncode(tif, "scanline"));}int_TIFFNoStripEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s){	(void) pp; (void) cc; (void) s;	return (TIFFNoEncode(tif, "strip"));}int_TIFFNoTileEncode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s){	(void) pp; (void) cc; (void) s;	return (TIFFNoEncode(tif, "tile"));}static intTIFFNoDecode(TIFF* tif, char* method){	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);	if (c)		TIFFError(tif->tif_name, "%s %s decoding is not implemented",		    c->name, method);	else		TIFFError(tif->tif_name,		    "Compression scheme %u %s decoding is not implemented",		    tif->tif_dir.td_compression, method);	return (-1);}int_TIFFNoRowDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s){	(void) pp; (void) cc; (void) s;	return (TIFFNoDecode(tif, "scanline"));}int_TIFFNoStripDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s){	(void) pp; (void) cc; (void) s;	return (TIFFNoDecode(tif, "strip"));}int_TIFFNoTileDecode(TIFF* tif, tidata_t pp, tsize_t cc, tsample_t s){	(void) pp; (void) cc; (void) s;	return (TIFFNoDecode(tif, "tile"));}int_TIFFNoSeek(TIFF* tif, uint32 off){	(void) off;	TIFFError(tif->tif_name,	    "Compression algorithm does not support random access");	return (0);}int_TIFFNoPreCode(TIFF* tif, tsample_t s){	(void) tif; (void) s;	return (1);}static int _TIFFtrue(TIFF* tif) { (void) tif; return (1); }static void _TIFFvoid(TIFF* tif) { (void) tif; }void_TIFFSetDefaultCompressionState(TIFF* tif){	tif->tif_setupdecode = _TIFFtrue;	tif->tif_predecode = _TIFFNoPreCode;	tif->tif_decoderow = _TIFFNoRowDecode;	tif->tif_decodestrip = _TIFFNoStripDecode;	tif->tif_decodetile = _TIFFNoTileDecode;	tif->tif_setupencode = _TIFFtrue;	tif->tif_preencode = _TIFFNoPreCode;	tif->tif_postencode = _TIFFtrue;	tif->tif_encoderow = _TIFFNoRowEncode;	tif->tif_encodestrip = _TIFFNoStripEncode;	tif->tif_encodetile = _TIFFNoTileEncode;	tif->tif_close = _TIFFvoid;	tif->tif_seek = _TIFFNoSeek;	tif->tif_cleanup = _TIFFvoid;	tif->tif_defstripsize = _TIFFDefaultStripSize;	tif->tif_deftilesize = _TIFFDefaultTileSize;	tif->tif_flags &= ~TIFF_NOBITREV;}intTIFFSetCompressionScheme(TIFF* tif, int scheme){	const TIFFCodec *c = TIFFFindCODEC((uint16) scheme);	_TIFFSetDefaultCompressionState(tif);	/*	 * Don't treat an unknown compression scheme as an error.	 * This permits applications to open files with data that	 * the library does not have builtin support for, but which	 * may still be meaningful.	 */	return (c ? (*c->init)(tif, scheme) : 1);}/* * Other compression schemes may be registered.  Registered * schemes can also override the builtin versions provided * by this library. */typedef struct _codec {	struct _codec*	next;	TIFFCodec*	info;} codec_t;static	codec_t* registeredCODECS = NULL;const TIFFCodec*TIFFFindCODEC(uint16 scheme){	const TIFFCodec* c;	codec_t* cd;	for (cd = registeredCODECS; cd; cd = cd->next)		if (cd->info->scheme == scheme)			return ((const TIFFCodec*) cd->info);	for (c = _TIFFBuiltinCODECS; c->name; c++)		if (c->scheme == scheme)			return (c);	return ((const TIFFCodec*) 0);}TIFFCodec*TIFFRegisterCODEC(uint16 scheme, const char* name, TIFFInitMethod init){	codec_t* cd = (codec_t*)	    _TIFFmalloc(sizeof (codec_t) + sizeof (TIFFCodec) + strlen(name)+1);	if (cd != NULL) {		cd->info = (TIFFCodec*) ((tidata_t) cd + sizeof (codec_t));		cd->info->name = (char*)		    ((tidata_t) cd->info + sizeof (TIFFCodec));		strcpy(cd->info->name, name);		cd->info->scheme = scheme;		cd->info->init = init;		cd->next = registeredCODECS;		registeredCODECS = cd;	} else		TIFFError("TIFFRegisterCODEC",		    "No space to register compression scheme %s", name);	return (cd->info);}voidTIFFUnRegisterCODEC(TIFFCodec* c){	codec_t* cd;	codec_t** pcd;	for (pcd = &registeredCODECS; (cd = *pcd); pcd = &cd->next)		if (cd->info == c) {			*pcd = cd->next;			_TIFFfree(cd);			return;		}	TIFFError("TIFFUnRegisterCODEC",	    "Cannot remove compression scheme %s; not registered", c->name);}

⌨️ 快捷键说明

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