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

📄 djpeg.c

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 C
📖 第 1 页 / 共 2 页
字号:
/** djpeg.c** Copyright (C) 1991-1997, Thomas G. Lane.* This file is part of the Independent JPEG Group's software.* For conditions of distribution and use, see the accompanying README file.** This file contains a command-line user interface for the JPEG decompressor.* It should work on any system with Unix- or MS-DOS-style command lines.** Two different command line styles are permitted, depending on the* compile-time switch TWO_FILE_COMMANDLINE:* djpeg [options]  inputfile outputfile* djpeg [options]  [inputfile]* In the second style, output is always to standard output, which you'd* normally redirect to a file or pipe to some other program.  Input is* either from a named file or from standard input (typically redirected).* The second style is convenient on Unix but is unhelpful on systems that* don't support pipes.  Also, you MUST use the first style if your system* doesn't do binary I/O to stdin/stdout.* To simplify script writing, the "-outfile" switch is provided.  The syntax* djpeg [options]  -outfile outputfile  inputfile* works regardless of which command line style is used.*/#include "cdjpeg.h"   /* Common decls for cjpeg/djpeg applications */#include "jversion.h"   /* for version message */#include <ctype.h>    /* to declare isprint() */#ifdef USE_CCOMMAND   /* command-line reader for Macintosh */#ifdef __MWERKS__#include <SIOUX.h>              /* Metrowerks needs this */#include <console.h>    /* ... and this */#endif#ifdef THINK_C#include <console.h>    /* Think declares it here */#endif#endif#include "ippcore.h"#ifdef __ENABLE_TIMING__#define WIN32_LEAN_AND_MEAN#include <windows.h>#endif/* Create the add-on message string table. */#define JMESSAGE(code,string) string ,static const char * const cdjpeg_message_table[] = {#include "cderror.h"  NULL};/** This list defines the known output image formats* (not all of which need be supported by a given version).* You can change the default output format by defining DEFAULT_FMT;* indeed, you had better do so if you undefine PPM_SUPPORTED.*/typedef enum {  FMT_BMP,    /* BMP format (Windows flavor) */    FMT_GIF,    /* GIF format */    FMT_OS2,    /* BMP format (OS/2 flavor) */    FMT_PPM,    /* PPM/PGM (PBMPLUS formats) */    FMT_RLE,    /* RLE format */    FMT_TARGA,    /* Targa format */    FMT_TIFF    /* TIFF format */} IMAGE_FORMATS;#ifndef DEFAULT_FMT   /* so can override from CFLAGS in Makefile */#define DEFAULT_FMT FMT_PPM#endifstatic IMAGE_FORMATS requested_fmt;/** Argument-parsing code.* The switch parser is designed to be useful with DOS-style command line* syntax, ie, intermixed switches and file names, where only the switches* to the left of a given file name affect processing of that file.* The main program in this file doesn't actually use this capability...*/static const char * progname; /* program name for error messages */static char * outfilename;  /* for -outfile switch */LOCAL(void)usage (void)/* complain about bad command line */{  fprintf(stderr, "usage: %s [switches] ", progname);#ifdef TWO_FILE_COMMANDLINE  fprintf(stderr, "inputfile outputfile\n");#else  fprintf(stderr, "[inputfile]\n");#endif  fprintf(stderr, "Switches (names may be abbreviated):\n");  fprintf(stderr, "  -colors N      Reduce image to no more than N colors\n");  fprintf(stderr, "  -fast          Fast, low-quality processing\n");  fprintf(stderr, "  -grayscale     Force grayscale output\n");#ifdef IDCT_SCALING_SUPPORTED  fprintf(stderr, "  -scale M/N     Scale output image by fraction M/N, eg, 1/8\n");#endif#ifdef BMP_SUPPORTED  fprintf(stderr, "  -bmp           Select BMP output format (Windows style)%s\n",    (DEFAULT_FMT == FMT_BMP ? " (default)" : ""));#endif#ifdef GIF_SUPPORTED  fprintf(stderr, "  -gif           Select GIF output format%s\n",    (DEFAULT_FMT == FMT_GIF ? " (default)" : ""));#endif#ifdef BMP_SUPPORTED  fprintf(stderr, "  -os2           Select BMP output format (OS/2 style)%s\n",    (DEFAULT_FMT == FMT_OS2 ? " (default)" : ""));#endif#ifdef PPM_SUPPORTED  fprintf(stderr, "  -pnm           Select PBMPLUS (PPM/PGM) output format%s\n",    (DEFAULT_FMT == FMT_PPM ? " (default)" : ""));#endif#ifdef RLE_SUPPORTED  fprintf(stderr, "  -rle           Select Utah RLE output format%s\n",    (DEFAULT_FMT == FMT_RLE ? " (default)" : ""));#endif#ifdef TARGA_SUPPORTED  fprintf(stderr, "  -targa         Select Targa output format%s\n",    (DEFAULT_FMT == FMT_TARGA ? " (default)" : ""));#endif  fprintf(stderr, "Switches for advanced users:\n");#ifdef DCT_ISLOW_SUPPORTED  fprintf(stderr, "  -dct int       Use integer DCT method%s\n",    (JDCT_DEFAULT == JDCT_ISLOW ? " (default)" : ""));#endif#ifdef DCT_IFAST_SUPPORTED  fprintf(stderr, "  -dct fast      Use fast integer DCT (less accurate)%s\n",    (JDCT_DEFAULT == JDCT_IFAST ? " (default)" : ""));#endif#ifdef DCT_FLOAT_SUPPORTED  fprintf(stderr, "  -dct float     Use floating-point DCT method%s\n",    (JDCT_DEFAULT == JDCT_FLOAT ? " (default)" : ""));#endif  fprintf(stderr, "  -dither fs     Use F-S dithering (default)\n");  fprintf(stderr, "  -dither none   Don't use dithering in quantization\n");  fprintf(stderr, "  -dither ordered  Use ordered dither (medium speed, quality)\n");#ifdef QUANT_2PASS_SUPPORTED  fprintf(stderr, "  -map FILE      Map to colors used in named image file\n");#endif  fprintf(stderr, "  -nosmooth      Don't use high-quality upsampling\n");#ifdef QUANT_1PASS_SUPPORTED  fprintf(stderr, "  -onepass       Use 1-pass quantization (fast, low quality)\n");#endif  fprintf(stderr, "  -maxmemory N   Maximum memory to use (in kbytes)\n");  fprintf(stderr, "  -outfile name  Specify name for output file\n");  fprintf(stderr, "  -verbose  or  -debug   Emit debug output\n");  exit(EXIT_FAILURE);}LOCAL(int)parse_switches (j_decompress_ptr cinfo, int argc, char **argv,                int last_file_arg_seen, boolean for_real)                /* Parse optional switches.                * Returns argv[] index of first file-name argument (== argc if none).                * Any file names with indexes <= last_file_arg_seen are ignored;                * they have presumably been processed in a previous iteration.                * (Pass 0 for last_file_arg_seen on the first or only iteration.)                * for_real is FALSE on the first (dummy) pass; we may skip any expensive                * processing.                */{  int argn;  char * arg;  /* Set up default JPEG parameters. */  requested_fmt = DEFAULT_FMT;  /* set default output file format */  outfilename = NULL;  cinfo->err->trace_level = 0;  /* Scan command line options, adjust parameters */  for (argn = 1; argn < argc; argn++) {    arg = argv[argn];    if (*arg != '-') {      /* Not a switch, must be a file name argument */      if (argn <= last_file_arg_seen) {        outfilename = NULL; /* -outfile applies to just one input file */        continue;   /* ignore this name if previously processed */      }      break;      /* else done parsing switches */    }    arg++;      /* advance past switch marker character */    if (keymatch(arg, "bmp", 1)) {      /* BMP output format. */      requested_fmt = FMT_BMP;    } else if (keymatch(arg, "colors", 1) || keymatch(arg, "colours", 1) ||      keymatch(arg, "quantize", 1) || keymatch(arg, "quantise", 1)) {      /* Do color quantization. */      int val;      if (++argn >= argc) /* advance to next argument */        usage();      if (sscanf(argv[argn], "%d", &val) != 1)        usage();      cinfo->desired_number_of_colors = val;      cinfo->quantize_colors = TRUE;    } else if (keymatch(arg, "dct", 2)) {      /* Select IDCT algorithm. */      if (++argn >= argc) /* advance to next argument */        usage();      if (keymatch(argv[argn], "int", 1)) {        cinfo->dct_method = JDCT_ISLOW;      } else if (keymatch(argv[argn], "fast", 2)) {        cinfo->dct_method = JDCT_IFAST;      } else if (keymatch(argv[argn], "float", 2)) {        cinfo->dct_method = JDCT_FLOAT;      } else        usage();    } else if (keymatch(arg, "dither", 2)) {      /* Select dithering algorithm. */      if (++argn >= argc) /* advance to next argument */        usage();      if (keymatch(argv[argn], "fs", 2)) {        cinfo->dither_mode = JDITHER_FS;      } else if (keymatch(argv[argn], "none", 2)) {        cinfo->dither_mode = JDITHER_NONE;      } else if (keymatch(argv[argn], "ordered", 2)) {        cinfo->dither_mode = JDITHER_ORDERED;      } else        usage();    } else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) {      /* Enable debug printouts. */      /* On first -d, print version identification */      static boolean printed_version = FALSE;      if (! printed_version) {        fprintf(stderr, "Independent JPEG Group's DJPEG, version %s\n%s\n",          JVERSION, JCOPYRIGHT);        printed_version = TRUE;      }      cinfo->err->trace_level++;    } else if (keymatch(arg, "fast", 1)) {      /* Select recommended processing options for quick-and-dirty output. */      cinfo->two_pass_quantize = FALSE;      cinfo->dither_mode = JDITHER_ORDERED;      if (! cinfo->quantize_colors) /* don't override an earlier -colors */        cinfo->desired_number_of_colors = 216;      cinfo->dct_method = JDCT_FASTEST;      cinfo->do_fancy_upsampling = FALSE;    } else if (keymatch(arg, "gif", 1)) {      /* GIF output format. */      requested_fmt = FMT_GIF;    } else if (keymatch(arg, "grayscale", 2) || keymatch(arg, "greyscale",2)) {      /* Force monochrome output. */      cinfo->out_color_space = JCS_GRAYSCALE;    } else if (keymatch(arg, "map", 3)) {      /* Quantize to a color map taken from an input file. */      if (++argn >= argc) /* advance to next argument */        usage();      if (for_real) {   /* too expensive to do twice! */#ifdef QUANT_2PASS_SUPPORTED  /* otherwise can't quantize to supplied map */        FILE * mapfile;        if ((mapfile = fopen(argv[argn], READ_BINARY)) == NULL) {          fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]);          exit(EXIT_FAILURE);        }        read_color_map(cinfo, mapfile);        fclose(mapfile);        cinfo->quantize_colors = TRUE;#else        ERREXIT(cinfo, JERR_NOT_COMPILED);#endif      }    } else if (keymatch(arg, "maxmemory", 3)) {      /* Maximum memory in Kb (or Mb with 'm'). */      long lval;      char ch = 'x';      if (++argn >= argc) /* advance to next argument */        usage();      if (sscanf(argv[argn], "%ld%c", &lval, &ch) < 1)        usage();      if (ch == 'm' || ch == 'M')        lval *= 1000L;      cinfo->mem->max_memory_to_use = lval * 1000L;    } else if (keymatch(arg, "nosmooth", 3)) {      /* Suppress fancy upsampling */      cinfo->do_fancy_upsampling = FALSE;    } else if (keymatch(arg, "onepass", 3)) {      /* Use fast one-pass quantization. */      cinfo->two_pass_quantize = FALSE;    } else if (keymatch(arg, "os2", 3)) {      /* BMP output format (OS/2 flavor). */      requested_fmt = FMT_OS2;    } else if (keymatch(arg, "outfile", 4)) {      /* Set output file name. */      if (++argn >= argc) /* advance to next argument */        usage();      outfilename = argv[argn]; /* save it away for later use */    } else if (keymatch(arg, "pnm", 1) || keymatch(arg, "ppm", 1)) {      /* PPM/PGM output format. */      requested_fmt = FMT_PPM;    } else if (keymatch(arg, "rle", 1)) {      /* RLE output format. */      requested_fmt = FMT_RLE;    } else if (keymatch(arg, "scale", 1)) {      /* Scale the output image by a fraction M/N. */      if (++argn >= argc) /* advance to next argument */        usage();      if (sscanf(argv[argn], "%d/%d",        &cinfo->scale_num, &cinfo->scale_denom) != 2)        usage();    } else if (keymatch(arg, "targa", 1)) {      /* Targa output format. */      requested_fmt = FMT_TARGA;

⌨️ 快捷键说明

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