tif_codec.c
上传用户:looem2003
上传日期:2014-07-20
资源大小:13733k
文件大小:5k
源码类别:

打印编程

开发平台:

Visual C++

  1. /* $Id: tif_codec.c,v 1.10 2005/12/21 12:23:13 joris Exp $ */
  2. /*
  3.  * Copyright (c) 1988-1997 Sam Leffler
  4.  * Copyright (c) 1991-1997 Silicon Graphics, Inc.
  5.  *
  6.  * Permission to use, copy, modify, distribute, and sell this software and 
  7.  * its documentation for any purpose is hereby granted without fee, provided
  8.  * that (i) the above copyright notices and this permission notice appear in
  9.  * all copies of the software and related documentation, and (ii) the names of
  10.  * Sam Leffler and Silicon Graphics may not be used in any advertising or
  11.  * publicity relating to the software without the specific, prior written
  12.  * permission of Sam Leffler and Silicon Graphics.
  13.  * 
  14.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  15.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  16.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  17.  * 
  18.  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  19.  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  20.  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  21.  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  22.  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  23.  * OF THIS SOFTWARE.
  24.  */
  25. /*
  26.  * TIFF Library
  27.  *
  28.  * Builtin Compression Scheme Configuration Support.
  29.  */
  30. #include "tiffiop.h"
  31. static int NotConfigured(TIFF*, int);
  32. #ifndef LZW_SUPPORT
  33. #define TIFFInitLZW NotConfigured
  34. #endif
  35. #ifndef PACKBITS_SUPPORT
  36. #define TIFFInitPackBits NotConfigured
  37. #endif
  38. #ifndef THUNDER_SUPPORT
  39. #define TIFFInitThunderScan NotConfigured
  40. #endif
  41. #ifndef NEXT_SUPPORT
  42. #define TIFFInitNeXT NotConfigured
  43. #endif
  44. #ifndef JPEG_SUPPORT
  45. #define TIFFInitJPEG NotConfigured
  46. #endif
  47. #ifndef OJPEG_SUPPORT
  48. #define TIFFInitOJPEG NotConfigured
  49. #endif
  50. #ifndef CCITT_SUPPORT
  51. #define TIFFInitCCITTRLE NotConfigured
  52. #define TIFFInitCCITTRLEW NotConfigured
  53. #define TIFFInitCCITTFax3 NotConfigured
  54. #define TIFFInitCCITTFax4 NotConfigured
  55. #endif
  56. #ifndef JBIG_SUPPORT
  57. #define TIFFInitJBIG NotConfigured
  58. #endif
  59. #ifndef ZIP_SUPPORT
  60. #define TIFFInitZIP NotConfigured
  61. #endif
  62. #ifndef PIXARLOG_SUPPORT
  63. #define TIFFInitPixarLog NotConfigured
  64. #endif
  65. #ifndef LOGLUV_SUPPORT
  66. #define TIFFInitSGILog NotConfigured
  67. #endif
  68. /*
  69.  * Compression schemes statically built into the library.
  70.  */
  71. #ifdef VMS
  72. const TIFFCodec _TIFFBuiltinCODECS[] = {
  73. #else
  74. TIFFCodec _TIFFBuiltinCODECS[] = {
  75. #endif
  76.     { "None", COMPRESSION_NONE, TIFFInitDumpMode },
  77.     { "LZW", COMPRESSION_LZW, TIFFInitLZW },
  78.     { "PackBits", COMPRESSION_PACKBITS, TIFFInitPackBits },
  79.     { "ThunderScan", COMPRESSION_THUNDERSCAN,TIFFInitThunderScan },
  80.     { "NeXT", COMPRESSION_NEXT, TIFFInitNeXT },
  81.     { "JPEG", COMPRESSION_JPEG, TIFFInitJPEG },
  82.     { "Old-style JPEG", COMPRESSION_OJPEG, TIFFInitOJPEG },
  83.     { "CCITT RLE", COMPRESSION_CCITTRLE, TIFFInitCCITTRLE },
  84.     { "CCITT RLE/W", COMPRESSION_CCITTRLEW, TIFFInitCCITTRLEW },
  85.     { "CCITT Group 3", COMPRESSION_CCITTFAX3, TIFFInitCCITTFax3 },
  86.     { "CCITT Group 4", COMPRESSION_CCITTFAX4, TIFFInitCCITTFax4 },
  87.     { "ISO JBIG", COMPRESSION_JBIG, TIFFInitJBIG },
  88.     { "Deflate", COMPRESSION_DEFLATE, TIFFInitZIP },
  89.     { "AdobeDeflate",   COMPRESSION_ADOBE_DEFLATE , TIFFInitZIP }, 
  90.     { "PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog },
  91.     { "SGILog", COMPRESSION_SGILOG, TIFFInitSGILog },
  92.     { "SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog },
  93.     { NULL,             0,                      NULL }
  94. };
  95. static int
  96. _notConfigured(TIFF* tif)
  97. {
  98. const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
  99. TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
  100.     "%s compression support is not configured", c->name);
  101. return (0);
  102. }
  103. static int
  104. NotConfigured(TIFF* tif, int scheme)
  105. {
  106.     (void) scheme;
  107.     
  108.     tif->tif_decodestatus = FALSE;
  109.     tif->tif_setupdecode = _notConfigured;
  110.     tif->tif_encodestatus = FALSE;
  111.     tif->tif_setupencode = _notConfigured;
  112.     return (1);
  113. }
  114. /************************************************************************/
  115. /*                       TIFFIsCODECConfigured()                        */
  116. /************************************************************************/
  117. /**
  118.  * Check whether we have working codec for the specific coding scheme.
  119.  * 
  120.  * @return returns 1 if the codec is configured and working. Otherwise
  121.  * 0 will be returned.
  122.  */
  123. int
  124. TIFFIsCODECConfigured(uint16 scheme)
  125. {
  126. const TIFFCodec* codec = TIFFFindCODEC(scheme);
  127. if(codec == NULL) {
  128.             return 0;
  129.         }
  130.         if(codec->init == NULL) {
  131.             return 0;
  132.         }
  133. if(codec->init != NotConfigured){
  134.             return 1;
  135.         }
  136. return 0;
  137. }