diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2018-12-29 16:32:28 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2018-12-29 16:32:28 +0000 |
commit | ee250e7490cbb3550fed22fdb98b7152cce20b72 (patch) | |
tree | 83fd278faf86341c5495567396e5abea2ec1a4a4 /converter/other/jpeg2000 | |
parent | ebf403d4015d30f19a37895efdce201300c9b418 (diff) | |
download | netpbm-mirror-ee250e7490cbb3550fed22fdb98b7152cce20b72.tar.gz netpbm-mirror-ee250e7490cbb3550fed22fdb98b7152cce20b72.tar.xz netpbm-mirror-ee250e7490cbb3550fed22fdb98b7152cce20b72.zip |
Promote current Development release as Advanced
git-svn-id: http://svn.code.sf.net/p/netpbm/code/advanced@3468 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'converter/other/jpeg2000')
-rw-r--r-- | converter/other/jpeg2000/jpeg2ktopam.c | 107 | ||||
-rw-r--r-- | converter/other/jpeg2000/libjasper/jpc/jpc_util.c | 26 | ||||
-rw-r--r-- | converter/other/jpeg2000/pamtojpeg2k.c | 82 |
3 files changed, 109 insertions, 106 deletions
diff --git a/converter/other/jpeg2000/jpeg2ktopam.c b/converter/other/jpeg2000/jpeg2ktopam.c index b7276241..b507f56e 100644 --- a/converter/other/jpeg2000/jpeg2ktopam.c +++ b/converter/other/jpeg2000/jpeg2ktopam.c @@ -62,7 +62,7 @@ parseCommandLine(int argc, char ** argv, MALLOCARRAY_NOFAIL(option_def, 100); option_def_index = 0; /* incremented by OPTENTRY */ - OPTENT3(0, "verbose", OPT_FLAG, NULL, + OPTENT3(0, "verbose", OPT_FLAG, NULL, &cmdlineP->verbose, 0); OPTENT3(0, "debuglevel", OPT_UINT, &cmdlineP->debuglevel, &debuglevelSpec, 0); @@ -80,7 +80,7 @@ parseCommandLine(int argc, char ** argv, cmdlineP->inputFilename = strdup("-"); /* he wants stdin */ else if (argc - 1 == 1) cmdlineP->inputFilename = strdup(argv[1]); - else + else pm_error("Too many arguments. The only argument accepted\n" "is the input file specification"); @@ -107,11 +107,11 @@ validateJ2k(jas_stream_t * const instreamP) { } } - + static void -readJ2k(const char * const inputFilename, +readJ2k(const char * const inputFilename, jas_image_t ** const jasperPP) { jas_image_t * jasperP; @@ -127,7 +127,7 @@ readJ2k(const char * const inputFilename, instreamP = jas_stream_fopen(inputFilename, "rb"); if (instreamP == NULL ) pm_error("cannot open input image file '%s'", inputFilename); - } + } validateJ2k(instreamP); @@ -139,7 +139,7 @@ readJ2k(const char * const inputFilename, pm_error("Unable to interpret JPEG-2000 input. " "The Jasper library jas_image_decode() subroutine failed."); - jas_stream_close(instreamP); + jas_stream_close(instreamP); *jasperPP = jasperP; } @@ -150,7 +150,7 @@ static void getRgbComponents(int jasperCmpnt[], jas_image_t * const jasperP) { { - int const rc = + int const rc = jas_image_getcmptbytype(jasperP, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_RGB_R)); if (rc < 0) @@ -159,12 +159,12 @@ getRgbComponents(int jasperCmpnt[], jas_image_t * const jasperP) { else jasperCmpnt[PAM_RED_PLANE] = rc; - if (jas_image_cmptsgnd(jasperP, rc)) + if (jas_image_cmptsgnd(jasperP, rc)) pm_error("Input image says it is RGB, but has signed values " "for what should be the red intensities."); } { - int const rc = + int const rc = jas_image_getcmptbytype(jasperP, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_RGB_G)); if (rc < 0) @@ -173,12 +173,12 @@ getRgbComponents(int jasperCmpnt[], jas_image_t * const jasperP) { else jasperCmpnt[PAM_GRN_PLANE] = rc; - if (jas_image_cmptsgnd(jasperP, rc)) + if (jas_image_cmptsgnd(jasperP, rc)) pm_error("Input image says it is RGB, but has signed values " "for what should be the green intensities."); } { - int const rc = + int const rc = jas_image_getcmptbytype(jasperP, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_RGB_B)); if (rc < 0) @@ -187,18 +187,18 @@ getRgbComponents(int jasperCmpnt[], jas_image_t * const jasperP) { else jasperCmpnt[PAM_BLU_PLANE] = rc; - if (jas_image_cmptsgnd(jasperP, rc)) + if (jas_image_cmptsgnd(jasperP, rc)) pm_error("Input image says it is RGB, but has signed values " "for what should be the blue intensities."); } -} +} static void getGrayComponent(int * jasperCmptP, jas_image_t * const jasperP) { - int const rc = + int const rc = jas_image_getcmptbytype(jasperP, JAS_IMAGE_CT_COLOR(JAS_IMAGE_CT_GRAY_Y)); if (rc < 0) @@ -206,7 +206,7 @@ getGrayComponent(int * jasperCmptP, jas_image_t * const jasperP) { "no gray intensity component"); else *jasperCmptP = rc; - if (jas_image_cmptsgnd(jasperP, 0)) + if (jas_image_cmptsgnd(jasperP, 0)) pm_error("Input image says it is grayscale, but has signed values " "for what should be the gray levels."); } @@ -221,13 +221,13 @@ validateComponentsAlike(jas_image_t * const jasperP) { all the channels are the same, and abort the program if not. -----------------------------------------------------------------------------*/ int cmptNo; - + for (cmptNo = 0; cmptNo < jas_image_numcmpts(jasperP); ++cmptNo) { - if (jas_image_cmptwidth(jasperP, cmptNo) != + if (jas_image_cmptwidth(jasperP, cmptNo) != jas_image_cmptwidth(jasperP, 0)) pm_message("Input image does not have components all the same " "width."); - if (jas_image_cmptheight(jasperP, cmptNo) != + if (jas_image_cmptheight(jasperP, cmptNo) != jas_image_cmptheight(jasperP, 0)) pm_message("Input image does not have components all the same " "height."); @@ -241,7 +241,7 @@ maxJasperComponentPrecision(jas_image_t * const jasperP) { int cmptNo; unsigned int max; - + max = 1; for (cmptNo = 0; cmptNo < jas_image_numcmpts(jasperP); ++cmptNo) @@ -262,8 +262,8 @@ computeOutputParm(jas_image_t * const jasperP, with the Jasper library that corresponds to Plane P of the PAM. */ - switch (jas_clrspc_fam(jas_image_clrspc(jasperP))) { - case JAS_CLRSPC_FAM_GRAY: + switch (jas_clrspc_fam(jas_image_clrspc(jasperP))) { + case JAS_CLRSPC_FAM_GRAY: outpamP->depth = 1; MALLOCARRAY_NOFAIL(jasperCmptNo, 1); getGrayComponent(&jasperCmptNo[0], jasperP); @@ -275,7 +275,7 @@ computeOutputParm(jas_image_t * const jasperP, strcpy(outpamP->tuple_type, PAM_PGM_TUPLETYPE); } break; - case JAS_CLRSPC_FAM_RGB: + case JAS_CLRSPC_FAM_RGB: outpamP->depth = 3; MALLOCARRAY_NOFAIL(jasperCmptNo, 3); getRgbComponents(jasperCmptNo, jasperP); @@ -293,15 +293,15 @@ computeOutputParm(jas_image_t * const jasperP, jasperCmptNo[plane] = plane; } strcpy(outpamP->tuple_type, ""); - if (jas_image_cmptsgnd(jasperP, 0)) + if (jas_image_cmptsgnd(jasperP, 0)) pm_message("Warning: Input image has signed sample values. " "They will be represented in the PAM output in " "two's complement."); } outpamP->plainformat = FALSE; - outpamP->width = jas_image_cmptwidth(jasperP, 0); - outpamP->height = jas_image_cmptheight(jasperP, 0); + outpamP->width = jas_image_cmptwidth(jasperP, 0); + outpamP->height = jas_image_cmptheight(jasperP, 0); validateComponentsAlike(jasperP); @@ -309,7 +309,7 @@ computeOutputParm(jas_image_t * const jasperP, unsigned int const maxPrecision = maxJasperComponentPrecision(jasperP); outpamP->maxval = pm_bitstomaxval(maxPrecision); - + outpamP->bytes_per_sample = (maxPrecision + 7)/8; } *jasperCmptNoP = jasperCmptNo; @@ -320,7 +320,7 @@ computeOutputParm(jas_image_t * const jasperP, static void createMatrices(struct pam * const outpamP, jas_matrix_t *** matrixP) { - jas_matrix_t ** matrix; + jas_matrix_t ** matrix; unsigned int plane; MALLOCARRAY_NOFAIL(matrix, outpamP->depth); @@ -331,14 +331,14 @@ createMatrices(struct pam * const outpamP, jas_matrix_t *** matrixP) { if (matrix[plane] == NULL) pm_error("Unable to create matrix for plane %u. " "jas_matrix_create() failed.", plane); - } + } *matrixP = matrix; } static void -destroyMatrices(struct pam * const outpamP, +destroyMatrices(struct pam * const outpamP, jas_matrix_t ** const matrix ) { unsigned int plane; @@ -346,7 +346,7 @@ destroyMatrices(struct pam * const outpamP, for (plane = 0; plane < outpamP->depth; ++plane) jas_matrix_destroy(matrix[plane]); free(matrix); -} +} @@ -356,7 +356,7 @@ computeComponentMaxval(struct pam * const outpamP, int const jasperCmpt[], sample ** const jasperMaxvalP, bool * const singleMaxvalP) { - + sample * jasperMaxval; unsigned int plane; @@ -364,7 +364,7 @@ computeComponentMaxval(struct pam * const outpamP, *singleMaxvalP = TRUE; /* initial assumption */ for (plane = 0; plane < outpamP->depth; ++plane) { - jasperMaxval[plane] = + jasperMaxval[plane] = pm_bitstomaxval(jas_image_cmptprec(jasperP, jasperCmpt[plane])); if (jasperMaxval[plane] != jasperMaxval[0]) *singleMaxvalP = FALSE; @@ -372,7 +372,7 @@ computeComponentMaxval(struct pam * const outpamP, *jasperMaxvalP = jasperMaxval; } - + static void copyRowSingleMaxval(jas_seqent_t ** const jasperRow, @@ -387,10 +387,10 @@ copyRowSingleMaxval(jas_seqent_t ** const jasperRow, This is significantly faster than copyRowAnyMaxval(). -----------------------------------------------------------------------------*/ unsigned int col; - + for (col = 0; col < outpamP->width; ++col) { unsigned int plane; - for (plane = 0; plane < outpamP->depth; ++plane) + for (plane = 0; plane < outpamP->depth; ++plane) tuplerow[col][plane] = jasperRow[plane][col]; } } @@ -411,12 +411,12 @@ copyRowAnyMaxval(jas_seqent_t ** const jasperRow, This is significantly slower than copyRowSingleMaxval(). -----------------------------------------------------------------------------*/ unsigned int col; - + for (col = 0; col < outpamP->width; ++col) { unsigned int plane; - for (plane = 0; plane < outpamP->depth; ++plane) - tuplerow[col][plane] = - jasperRow[plane][col] * + for (plane = 0; plane < outpamP->depth; ++plane) + tuplerow[col][plane] = + jasperRow[plane][col] * outpamP->maxval / jasperMaxval[plane]; } } @@ -461,11 +461,11 @@ convertToPamPnm(struct pam * const outpamP, matrix[plane]); if (rc != 0) pm_error("jas_image_readcmpt() of row %u plane %u " - "failed.", + "failed.", row, plane); jasperRow[plane] = jas_matrix_getref(matrix[plane], 0, 0); } - if (singleMaxval) + if (singleMaxval) copyRowSingleMaxval(jasperRow, tuplerow, outpamP); else copyRowAnyMaxval(jasperRow, tuplerow, outpamP, jasperMaxval); @@ -489,25 +489,25 @@ main(int argc, char **argv) struct pam outpam; int * jasperCmpt; /* malloc'ed */ /* jaspercmpt[P] is the component number for use with the - Jasper library that corresponds to Plane P of the PAM. + Jasper library that corresponds to Plane P of the PAM. */ jas_image_t * jasperP; pnm_init(&argc, argv); - + parseCommandLine(argc, argv, &cmdline); - - { + + { int rc; - + rc = jas_init(); if ( rc != 0 ) pm_error("Failed to initialize Jasper library. " "jas_init() returns rc %d", rc ); } - + jas_setdbglevel(cmdline.debuglevel); - + readJ2k(cmdline.inputFilename, &jasperP); outpam.file = stdout; @@ -517,13 +517,16 @@ main(int argc, char **argv) computeOutputParm(jasperP, &outpam, &jasperCmpt); pnm_writepaminit(&outpam); - + convertToPamPnm(&outpam, jasperP, jasperCmpt); - + free(jasperCmpt); - jas_image_destroy(jasperP); + jas_image_destroy(jasperP); pm_close(stdout); - + return 0; } + + + diff --git a/converter/other/jpeg2000/libjasper/jpc/jpc_util.c b/converter/other/jpeg2000/libjasper/jpc/jpc_util.c index ecc4b914..fede2bef 100644 --- a/converter/other/jpeg2000/libjasper/jpc/jpc_util.c +++ b/converter/other/jpeg2000/libjasper/jpc/jpc_util.c @@ -6,14 +6,14 @@ */ /* __START_OF_JASPER_LICENSE__ - * + * * JasPer Software License - * + * * IMAGE POWER JPEG-2000 PUBLIC LICENSE * ************************************ - * + * * GRANT: - * + * * Permission is hereby granted, free of charge, to any person (the "User") * obtaining a copy of this software and associated documentation, to deal * in the JasPer Software without restriction, including without limitation @@ -21,22 +21,22 @@ * and/or sell copies of the JasPer Software (in source and binary forms), * and to permit persons to whom the JasPer Software is furnished to do so, * provided further that the License Conditions below are met. - * + * * License Conditions * ****************** - * + * * A. Redistributions of source code must retain the above copyright notice, * and this list of conditions, and the following disclaimer. - * + * * B. Redistributions in binary form must reproduce the above copyright * notice, and this list of conditions, and the following disclaimer in * the documentation and/or other materials provided with the distribution. - * + * * C. Neither the name of Image Power, Inc. nor any other contributor * (including, but not limited to, the University of British Columbia and * Michael David Adams) may be used to endorse or promote products derived * from this software without specific prior written permission. - * + * * D. User agrees that it shall not commence any action against Image Power, * Inc., the University of British Columbia, Michael David Adams, or any * other contributors (collectively "Licensors") for infringement of any @@ -56,17 +56,17 @@ * trade dress, or service mark rights); and (v) divisions, continuations, * renewals, reissues and extensions of the foregoing (as and to the extent * applicable) now existing, hereafter filed, issued or acquired. - * + * * E. If User commences an infringement action against any Licensor(s) then * such Licensor(s) shall have the right to terminate User's license and * all sublicenses that have been granted hereunder by User to other parties. - * + * * F. This software is for use only in hardware or software products that * are compliant with ISO/IEC 15444-1 (i.e., JPEG-2000 Part 1). No license * or right to this Software is granted for products that do not comply * with ISO/IEC 15444-1. The JPEG-2000 Part 1 standard can be purchased * from the ISO. - * + * * THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. * NO USE OF THE JASPER SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER * THIS DISCLAIMER. THE JASPER SOFTWARE IS PROVIDED BY THE LICENSORS AND @@ -106,7 +106,7 @@ * TECHNOLOGY OR PRODUCTS FOR HIGH RISK ACTIVITIES AND WILL ENSURE THAT ITS * CUSTOMERS AND END-USERS OF ITS PRODUCTS ARE PROVIDED WITH A COPY OF THE * NOTICE SPECIFIED IN THIS SECTION. - * + * * __END_OF_JASPER_LICENSE__ */ diff --git a/converter/other/jpeg2000/pamtojpeg2k.c b/converter/other/jpeg2000/pamtojpeg2k.c index 1272a422..4d73316a 100644 --- a/converter/other/jpeg2000/pamtojpeg2k.c +++ b/converter/other/jpeg2000/pamtojpeg2k.c @@ -98,7 +98,7 @@ parseCommandLine(int argc, char ** argv, char * modeOpt; unsigned int option_def_index; - + MALLOCARRAY_NOFAIL(option_def, 100); option_def_index = 0; /* incremented by OPTENTRY */ @@ -134,25 +134,25 @@ parseCommandLine(int argc, char ** argv, &numrlvlsSpec, 0); OPTENT3(0, "numgbits", OPT_UINT, &cmdlineP->numgbits, &numgbitsSpec, 0); - OPTENT3(0, "nomct", OPT_FLAG, NULL, + OPTENT3(0, "nomct", OPT_FLAG, NULL, &cmdlineP->nomct, 0); - OPTENT3(0, "sop", OPT_FLAG, NULL, + OPTENT3(0, "sop", OPT_FLAG, NULL, &cmdlineP->sop, 0); - OPTENT3(0, "eph", OPT_FLAG, NULL, + OPTENT3(0, "eph", OPT_FLAG, NULL, &cmdlineP->eph, 0); - OPTENT3(0, "lazy", OPT_FLAG, NULL, + OPTENT3(0, "lazy", OPT_FLAG, NULL, &cmdlineP->lazy, 0); - OPTENT3(0, "termall", OPT_FLAG, NULL, + OPTENT3(0, "termall", OPT_FLAG, NULL, &cmdlineP->termall, 0); - OPTENT3(0, "segsym", OPT_FLAG, NULL, + OPTENT3(0, "segsym", OPT_FLAG, NULL, &cmdlineP->segsym, 0); - OPTENT3(0, "vcausal", OPT_FLAG, NULL, + OPTENT3(0, "vcausal", OPT_FLAG, NULL, &cmdlineP->vcausal, 0); - OPTENT3(0, "pterm", OPT_FLAG, NULL, + OPTENT3(0, "pterm", OPT_FLAG, NULL, &cmdlineP->pterm, 0); - OPTENT3(0, "resetprob", OPT_FLAG, NULL, + OPTENT3(0, "resetprob", OPT_FLAG, NULL, &cmdlineP->resetprob, 0); - OPTENT3(0, "verbose", OPT_FLAG, NULL, + OPTENT3(0, "verbose", OPT_FLAG, NULL, &cmdlineP->verbose, 0); OPTENT3(0, "debuglevel", OPT_UINT, &cmdlineP->debuglevel, &debuglevelSpec, 0); @@ -223,7 +223,7 @@ parseCommandLine(int argc, char ** argv, cmdlineP->inputFilename = strdup("-"); /* he wants stdin */ else if (argc - 1 == 1) cmdlineP->inputFilename = strdup(argv[1]); - else + else pm_error("Too many arguments. The only argument accepted\n" "is the input file specification"); @@ -232,7 +232,7 @@ parseCommandLine(int argc, char ** argv, static void -createJasperRaster(struct pam * const inpamP, +createJasperRaster(struct pam * const inpamP, jas_image_t * const jasperP) { /*---------------------------------------------------------------------------- Create the raster in the *jasperP object, reading the raster from the @@ -254,7 +254,7 @@ createJasperRaster(struct pam * const inpamP, if (matrix[plane] == NULL) pm_error("Unable to create matrix for plane %u. " "jas_matrix_create() failed.", plane); - } + } tuplerow = pnm_allocpamrow(inpamP); jasperMaxval = pm_bitstomaxval(pm_maxvaltobits(inpamP->maxval)); @@ -271,7 +271,7 @@ createJasperRaster(struct pam * const inpamP, unsigned int jasperSample; if (oddMaxval) - jasperSample = tuplerow[col][plane] * + jasperSample = tuplerow[col][plane] * jasperMaxval / inpamP->maxval; else jasperSample = tuplerow[col][plane]; @@ -279,16 +279,16 @@ createJasperRaster(struct pam * const inpamP, jas_matrix_set(matrix[plane], 0, col, jasperSample); } } - { + { unsigned int plane; for (plane = 0; plane < inpamP->depth; ++plane) { int rc; - rc = jas_image_writecmpt(jasperP, plane, 0, row, + rc = jas_image_writecmpt(jasperP, plane, 0, row, inpamP->width, 1, matrix[plane]); if (rc != 0) - pm_error("jas_image_writecmpt() of plane %u failed.", + pm_error("jas_image_writecmpt() of plane %u failed.", plane); } } @@ -297,14 +297,14 @@ createJasperRaster(struct pam * const inpamP, pnm_freepamrow(tuplerow); for (plane = 0; plane < inpamP->depth; ++plane) jas_matrix_destroy(matrix[plane]); - + free(matrix); } static void -createJasperImage(struct pam * const inpamP, +createJasperImage(struct pam * const inpamP, jas_image_t ** const jasperPP) { jas_image_cmptparm_t * cmptparms; @@ -322,7 +322,7 @@ createJasperImage(struct pam * const inpamP, cmptparms[plane].prec = pm_maxvaltobits(inpamP->maxval); cmptparms[plane].sgnd = 0; } - *jasperPP = + *jasperPP = jas_image_create(inpamP->depth, cmptparms, JAS_CLRSPC_UNKNOWN); if (*jasperPP == NULL) pm_error("Unable to create jasper image structure. " @@ -371,7 +371,7 @@ convertToJasperImage(struct pam * const inpamP, static void -writeJpc(jas_image_t * const jasperP, +writeJpc(jas_image_t * const jasperP, struct cmdlineInfo const cmdline, FILE * const ofP) { @@ -383,8 +383,8 @@ writeJpc(jas_image_t * const jasperP, /* Note: ilyrrates is a hack because we're too lazy to properly parse command line options to get the information and then compose - a proper input to Jasper. So the user can screw things up by - specifying garbage for the -ilyrrates option + a proper input to Jasper. So the user can screw things up by + specifying garbage for the -ilyrrates option */ if (strlen(cmdline.ilyrrates) > 0) pm_asprintf(&ilyrratesOpt, "ilyrrates=%s", cmdline.ilyrrates); @@ -410,7 +410,7 @@ writeJpc(jas_image_t * const jasperP, */ rateOpt[0] = '\0'; } - pm_asprintf(&options, + pm_asprintf(&options, "imgareatlx=%u " "imgareatly=%u " "tilegrdtlx=%u " @@ -428,7 +428,7 @@ writeJpc(jas_image_t * const jasperP, "numrlvls=%u " "numgbits=%u " "%s %s %s %s %s %s %s %s %s", - + cmdline.imgareatlx, cmdline.imgareatly, cmdline.tilegrdtlx, @@ -471,8 +471,8 @@ writeJpc(jas_image_t * const jasperP, pm_message("Using Jasper to encode to 'jpc' format with options " "'%s'", options); - rc = jas_image_encode(jasperP, outStreamP, - jas_image_strtofmt((char*)"jpc"), + rc = jas_image_encode(jasperP, outStreamP, + jas_image_strtofmt((char*)"jpc"), (char *)options); if (rc != 0) pm_error("jas_image_encode() failed to encode the JPEG 2000 " @@ -484,11 +484,11 @@ writeJpc(jas_image_t * const jasperP, int rc; rc = jas_stream_close(outStreamP); - + if (rc != 0) pm_error("Failed to close output stream, " "jas_stream_close() rc = %d", rc); - } + } jas_image_clearfmts(); @@ -506,33 +506,33 @@ main(int argc, char **argv) jas_image_t * jasperP; pnm_init(&argc, argv); - + parseCommandLine(argc, argv, &cmdline); - - { + + { int rc; - + rc = jas_init(); if ( rc != 0 ) pm_error("Failed to initialize Jasper library. " "jas_init() returns rc %d", rc ); } - + jas_setdbglevel(cmdline.debuglevel); - + ifP = pm_openr(cmdline.inputFilename); - + pnm_readpaminit(ifP, &inpam, PAM_STRUCT_SIZE(tuple_type)); - + convertToJasperImage(&inpam, &jasperP); - + writeJpc(jasperP, cmdline, stdout); - + jas_image_destroy(jasperP); pm_close(ifP); pm_close(stdout); - + return 0; } |