CDJPEG.h
上传用户:qiutianh
上传日期:2022-08-08
资源大小:939k
文件大小:7k
源码类别:

图形图象

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////
  2. //
  3. // Note : this file is included as part of the Smaller Animals Software
  4. // JpegFile package. Though this file has not been modified from it's 
  5. // original IJG 6a form, it is not the responsibility on the Independent
  6. // JPEG Group to answer questions regarding this code.
  7. //
  8. // Any questions you have about this code should be addressed to :
  9. //
  10. // CHRISDL@PAGESZ.NET - the distributor of this package.
  11. //
  12. // Remember, by including this code in the JpegFile package, Smaller 
  13. // Animals Software assumes all responsibilities for answering questions
  14. // about it. If we (SA Software) can't answer your questions ourselves, we 
  15. // will direct you to people who can.
  16. //
  17. // Thanks, CDL.
  18. //
  19. ////////////////////////////////////////////////////////////////////////
  20. /*
  21.  * cdjpeg.h
  22.  *
  23.  * Copyright (C) 1994-1996, Thomas G. Lane.
  24.  * This file is part of the Independent JPEG Group's software.
  25.  * For conditions of distribution and use, see the accompanying README file.
  26.  *
  27.  * This file contains common declarations for the sample applications
  28.  * cjpeg and djpeg.  It is NOT used by the core JPEG library.
  29.  */
  30. #define JPEG_CJPEG_DJPEG /* define proper options in jconfig.h */
  31. #define JPEG_INTERNAL_OPTIONS /* cjpeg.c,djpeg.c need to see xxx_SUPPORTED */
  32. #include "jinclude.h"
  33. #include "jpeglib.h"
  34. #include "jerror.h" /* get library error codes too */
  35. #include "cderror.h" /* get application-specific error codes */
  36. /*
  37.  * Object interface for cjpeg's source file decoding modules
  38.  */
  39. typedef struct cjpeg_source_struct * cjpeg_source_ptr;
  40. struct cjpeg_source_struct {
  41.   JMETHOD(void, start_input, (j_compress_ptr cinfo,
  42.       cjpeg_source_ptr sinfo));
  43.   JMETHOD(JDIMENSION, get_pixel_rows, (j_compress_ptr cinfo,
  44.        cjpeg_source_ptr sinfo));
  45.   JMETHOD(void, finish_input, (j_compress_ptr cinfo,
  46.        cjpeg_source_ptr sinfo));
  47.   FILE *input_file;
  48.   JSAMPARRAY buffer;
  49.   JDIMENSION buffer_height;
  50. };
  51. /*
  52.  * Object interface for djpeg's output file encoding modules
  53.  */
  54. typedef struct djpeg_dest_struct * djpeg_dest_ptr;
  55. struct djpeg_dest_struct {
  56.   /* start_output is called after jpeg_start_decompress finishes.
  57.    * The color map will be ready at this time, if one is needed.
  58.    */
  59.   JMETHOD(void, start_output, (j_decompress_ptr cinfo,
  60.        djpeg_dest_ptr dinfo));
  61.   /* Emit the specified number of pixel rows from the buffer. */
  62.   JMETHOD(void, put_pixel_rows, (j_decompress_ptr cinfo,
  63.  djpeg_dest_ptr dinfo,
  64.  JDIMENSION rows_supplied));
  65.   /* Finish up at the end of the image. */
  66.   JMETHOD(void, finish_output, (j_decompress_ptr cinfo,
  67. djpeg_dest_ptr dinfo));
  68.   /* Target file spec; filled in by djpeg.c after object is created. */
  69.   FILE * output_file;
  70.   /* Output pixel-row buffer.  Created by module init or start_output.
  71.    * Width is cinfo->output_width * cinfo->output_components;
  72.    * height is buffer_height.
  73.    */
  74.   JSAMPARRAY buffer;
  75.   JDIMENSION buffer_height;
  76. };
  77. /*
  78.  * cjpeg/djpeg may need to perform extra passes to convert to or from
  79.  * the source/destination file format.  The JPEG library does not know
  80.  * about these passes, but we'd like them to be counted by the progress
  81.  * monitor.  We use an expanded progress monitor object to hold the
  82.  * additional pass count.
  83.  */
  84. struct cdjpeg_progress_mgr {
  85.   struct jpeg_progress_mgr pub; /* fields known to JPEG library */
  86.   int completed_extra_passes; /* extra passes completed */
  87.   int total_extra_passes; /* total extra */
  88.   /* last printed percentage stored here to avoid multiple printouts */
  89.   int percent_done;
  90. };
  91. typedef struct cdjpeg_progress_mgr * cd_progress_ptr;
  92. /* Short forms of external names for systems with brain-damaged linkers. */
  93. #ifdef NEED_SHORT_EXTERNAL_NAMES
  94. #define jinit_read_bmp jIRdBMP
  95. #define jinit_write_bmp jIWrBMP
  96. #define jinit_read_gif jIRdGIF
  97. #define jinit_write_gif jIWrGIF
  98. #define jinit_read_ppm jIRdPPM
  99. #define jinit_write_ppm jIWrPPM
  100. #define jinit_read_rle jIRdRLE
  101. #define jinit_write_rle jIWrRLE
  102. #define jinit_read_targa jIRdTarga
  103. #define jinit_write_targa jIWrTarga
  104. #define read_quant_tables RdQTables
  105. #define read_scan_script RdScnScript
  106. #define set_quant_slots SetQSlots
  107. #define set_sample_factors SetSFacts
  108. #define read_color_map RdCMap
  109. #define enable_signal_catcher EnSigCatcher
  110. #define start_progress_monitor StProgMon
  111. #define end_progress_monitor EnProgMon
  112. #define read_stdin RdStdin
  113. #define write_stdout WrStdout
  114. #endif /* NEED_SHORT_EXTERNAL_NAMES */
  115. /* Module selection routines for I/O modules. */
  116. EXTERN(cjpeg_source_ptr) jinit_read_bmp JPP((j_compress_ptr cinfo));
  117. EXTERN(djpeg_dest_ptr) jinit_write_bmp JPP((j_decompress_ptr cinfo,
  118.     boolean is_os2));
  119. EXTERN(cjpeg_source_ptr) jinit_read_gif JPP((j_compress_ptr cinfo));
  120. EXTERN(djpeg_dest_ptr) jinit_write_gif JPP((j_decompress_ptr cinfo));
  121. EXTERN(cjpeg_source_ptr) jinit_read_ppm JPP((j_compress_ptr cinfo));
  122. EXTERN(djpeg_dest_ptr) jinit_write_ppm JPP((j_decompress_ptr cinfo));
  123. EXTERN(cjpeg_source_ptr) jinit_read_rle JPP((j_compress_ptr cinfo));
  124. EXTERN(djpeg_dest_ptr) jinit_write_rle JPP((j_decompress_ptr cinfo));
  125. EXTERN(cjpeg_source_ptr) jinit_read_targa JPP((j_compress_ptr cinfo));
  126. EXTERN(djpeg_dest_ptr) jinit_write_targa JPP((j_decompress_ptr cinfo));
  127. /* cjpeg support routines (in rdswitch.c) */
  128. EXTERN(boolean) read_quant_tables JPP((j_compress_ptr cinfo, char * filename,
  129.     int scale_factor, boolean force_baseline));
  130. EXTERN(boolean) read_scan_script JPP((j_compress_ptr cinfo, char * filename));
  131. EXTERN(boolean) set_quant_slots JPP((j_compress_ptr cinfo, char *arg));
  132. EXTERN(boolean) set_sample_factors JPP((j_compress_ptr cinfo, char *arg));
  133. /* djpeg support routines (in rdcolmap.c) */
  134. EXTERN(void) read_color_map JPP((j_decompress_ptr cinfo, FILE * infile));
  135. /* common support routines (in cdjpeg.c) */
  136. EXTERN(void) enable_signal_catcher JPP((j_common_ptr cinfo));
  137. EXTERN(void) start_progress_monitor JPP((j_common_ptr cinfo,
  138.  cd_progress_ptr progress));
  139. EXTERN(void) end_progress_monitor JPP((j_common_ptr cinfo));
  140. EXTERN(boolean) keymatch JPP((char * arg, const char * keyword, int minchars));
  141. EXTERN(FILE *) read_stdin JPP((void));
  142. EXTERN(FILE *) write_stdout JPP((void));
  143. /* miscellaneous useful macros */
  144. #ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */
  145. #define READ_BINARY "r"
  146. #define WRITE_BINARY "w"
  147. #else
  148. #define READ_BINARY "rb"
  149. #define WRITE_BINARY "wb"
  150. #endif
  151. #ifndef EXIT_FAILURE /* define exit() codes if not provided */
  152. #define EXIT_FAILURE  1
  153. #endif
  154. #ifndef EXIT_SUCCESS
  155. #ifdef VMS
  156. #define EXIT_SUCCESS  1 /* VMS is very nonstandard */
  157. #else
  158. #define EXIT_SUCCESS  0
  159. #endif
  160. #endif
  161. #ifndef EXIT_WARNING
  162. #ifdef VMS
  163. #define EXIT_WARNING  1 /* VMS is very nonstandard */
  164. #else
  165. #define EXIT_WARNING  2
  166. #endif
  167. #endif