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

📄 jasper.c

📁 这是个图象压缩解压软件的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (c) 1999-2000 Image Power, Inc. and the University of *   British Columbia. * Copyright (c) 2001-2003 Michael David Adams. * All rights reserved. *//* __START_OF_JASPER_LICENSE__ *  * JasPer License Version 2.0 *  * Copyright (c) 2001-2006 Michael David Adams * Copyright (c) 1999-2000 Image Power, Inc. * Copyright (c) 1999-2000 The University of British Columbia *  * All rights reserved. *  * Permission is hereby granted, free of charge, to any person (the * "User") obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, and/or sell copies of the Software, and to permit * persons to whom the Software is furnished to do so, subject to the * following conditions: *  * 1.  The above copyright notices and this permission notice (which * includes the disclaimer below) shall be included in all copies or * substantial portions of the Software. *  * 2.  The name of a copyright holder shall not be used to endorse or * promote products derived from the Software without specific prior * written permission. *  * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS * LICENSE.  NO USE OF THE SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER * THIS DISCLAIMER.  THE SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS * "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.  IN NO * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.  NO ASSURANCES ARE * PROVIDED BY THE COPYRIGHT HOLDERS THAT THE SOFTWARE DOES NOT INFRINGE * THE PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OF ANY OTHER ENTITY. * EACH COPYRIGHT HOLDER DISCLAIMS ANY LIABILITY TO THE USER FOR CLAIMS * BROUGHT BY ANY OTHER ENTITY BASED ON INFRINGEMENT OF INTELLECTUAL * PROPERTY RIGHTS OR OTHERWISE.  AS A CONDITION TO EXERCISING THE RIGHTS * GRANTED HEREUNDER, EACH USER HEREBY ASSUMES SOLE RESPONSIBILITY TO SECURE * ANY OTHER INTELLECTUAL PROPERTY RIGHTS NEEDED, IF ANY.  THE SOFTWARE * IS NOT FAULT-TOLERANT AND IS NOT INTENDED FOR USE IN MISSION-CRITICAL * SYSTEMS, SUCH AS THOSE USED IN THE OPERATION OF NUCLEAR FACILITIES, * AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL * SYSTEMS, DIRECT LIFE SUPPORT MACHINES, OR WEAPONS SYSTEMS, IN WHICH * THE FAILURE OF THE SOFTWARE OR SYSTEM COULD LEAD DIRECTLY TO DEATH, * PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL DAMAGE ("HIGH * RISK ACTIVITIES").  THE COPYRIGHT HOLDERS SPECIFICALLY DISCLAIM ANY * EXPRESS OR IMPLIED WARRANTY OF FITNESS FOR HIGH RISK ACTIVITIES. *  * __END_OF_JASPER_LICENSE__ *//* * JasPer Transcoder Program * * $Id$ *//******************************************************************************\* Includes.\******************************************************************************/#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <time.h>#include <jasper/jasper.h>/******************************************************************************\*\******************************************************************************/#define OPTSMAX	4096/******************************************************************************\* Types.\******************************************************************************//* Encoder command line options. */typedef struct {	char *infile;	/* The input image file. */	int infmt;	/* The input image file format. */	char *inopts;	char inoptsbuf[OPTSMAX + 1];	char *outfile;	/* The output image file. */	int outfmt;	char *outopts;	char outoptsbuf[OPTSMAX + 1];	int verbose;	/* Verbose mode. */	int debug;	int version;	int_fast32_t cmptno;	int srgb;} cmdopts_t;/******************************************************************************\* Local prototypes.\******************************************************************************/cmdopts_t *cmdopts_parse(int argc, char **argv);void cmdopts_destroy(cmdopts_t *cmdopts);void cmdusage(void);void badusage(void);void cmdinfo(void);int addopt(char *optstr, int maxlen, char *s);/******************************************************************************\* Global data.\******************************************************************************/char *cmdname = "";/******************************************************************************\* Code.\******************************************************************************/int main(int argc, char **argv){	jas_image_t *image;	cmdopts_t *cmdopts;	jas_stream_t *in;	jas_stream_t *out;	jas_tmr_t dectmr;	jas_tmr_t enctmr;	double dectime;	double enctime;	int_fast16_t numcmpts;	int i;	/* Determine the base name of this command. */	if ((cmdname = strrchr(argv[0], '/'))) {		++cmdname;	} else {		cmdname = argv[0];	}	if (jas_init()) {		abort();	}	/* Parse the command line options. */	if (!(cmdopts = cmdopts_parse(argc, argv))) {		fprintf(stderr, "error: cannot parse command line\n");		exit(EXIT_FAILURE);	}	if (cmdopts->version) {		printf("%s\n", JAS_VERSION);		fprintf(stderr, "libjasper %s\n", jas_getversion());		exit(EXIT_SUCCESS);	}	jas_setdbglevel(cmdopts->debug);	if (cmdopts->verbose) {		cmdinfo();	}	/* Open the input image file. */	if (cmdopts->infile) {		/* The input image is to be read from a file. */		if (!(in = jas_stream_fopen(cmdopts->infile, "rb"))) {			fprintf(stderr, "error: cannot open input image file %s\n",			  cmdopts->infile);			exit(EXIT_FAILURE);		}	} else {		/* The input image is to be read from standard input. */		if (!(in = jas_stream_fdopen(0, "rb"))) {			fprintf(stderr, "error: cannot open standard input\n");			exit(EXIT_FAILURE);		}	}	/* Open the output image file. */	if (cmdopts->outfile) {		/* The output image is to be written to a file. */		if (!(out = jas_stream_fopen(cmdopts->outfile, "w+b"))) {			fprintf(stderr, "error: cannot open output image file %s\n",			  cmdopts->outfile);			exit(EXIT_FAILURE);		}	} else {		/* The output image is to be written to standard output. */		if (!(out = jas_stream_fdopen(1, "w+b"))) {			fprintf(stderr, "error: cannot open standard output\n");			exit(EXIT_FAILURE);		}	}	if (cmdopts->infmt < 0) {		if ((cmdopts->infmt = jas_image_getfmt(in)) < 0) {			fprintf(stderr, "error: input image has unknown format\n");			exit(EXIT_FAILURE);		}	}	/* Get the input image data. */	jas_tmr_start(&dectmr);	if (!(image = jas_image_decode(in, cmdopts->infmt, cmdopts->inopts))) {		fprintf(stderr, "error: cannot load image data\n");		exit(EXIT_FAILURE);	}	jas_tmr_stop(&dectmr);	dectime = jas_tmr_get(&dectmr);	/* If requested, throw away all of the components except one.	  Why might this be desirable?  It is a hack, really.	  None of the image formats other than the JPEG-2000 ones support	  images with two, four, five, or more components.  This hack	  allows such images to be decoded with the non-JPEG-2000 decoders,	  one component at a time. */	numcmpts = jas_image_numcmpts(image);	if (cmdopts->cmptno >= 0 && cmdopts->cmptno < numcmpts) {		for (i = numcmpts - 1; i >= 0; --i) {			if (i != cmdopts->cmptno) {				jas_image_delcmpt(image, i);			}		}	}	if (cmdopts->srgb) {		jas_image_t *newimage;		jas_cmprof_t *outprof;		jas_eprintf("forcing conversion to sRGB\n");		if (!(outprof = jas_cmprof_createfromclrspc(JAS_CLRSPC_SRGB))) {			jas_eprintf("cannot create sRGB profile\n");			exit(EXIT_FAILURE);		}		if (!(newimage = jas_image_chclrspc(image, outprof, JAS_CMXFORM_INTENT_PER))) {			jas_eprintf("cannot convert to sRGB\n");			exit(EXIT_FAILURE);		}		jas_image_destroy(image);		jas_cmprof_destroy(outprof);		image = newimage;	}	/* Generate the output image data. */	jas_tmr_start(&enctmr);	if (jas_image_encode(image, out, cmdopts->outfmt, cmdopts->outopts)) {		fprintf(stderr, "error: cannot encode image\n");		exit(EXIT_FAILURE);	}	jas_stream_flush(out);	jas_tmr_stop(&enctmr);	enctime = jas_tmr_get(&enctmr);	if (cmdopts->verbose) {

⌨️ 快捷键说明

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