/* * wrppm.c * * This file was part of the Independent JPEG Group's software: * Copyright (C) 1991-1996, Thomas G. Lane. * Modified 2009 by Guido Vollbeding. * libjpeg-turbo Modifications: * Copyright (C) 2017, 2019-2020, 2022, D. R. Commander. * For conditions of distribution and use, see the accompanying README.ijg * file. * * This file contains routines to write output images in PPM/PGM format. * The extended 2-byte-per-sample raw PPM/PGM formats are supported. * The PBMPLUS library is NOT required to compile this software * (but it is highly useful as a set of PPM image manipulation programs). * * These routines may need modification for non-Unix environments or * specialized applications. As they stand, they assume output to * an ordinary stdio stream. */ #include "cmyk.h" #include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */ #ifdef PPM_SUPPORTED /* * For 12-bit JPEG data, we either downscale the values to 8 bits * (to write standard byte-per-sample PPM/PGM files), or output * nonstandard word-per-sample PPM/PGM files. Downscaling is done * if PPM_NORAWWORD is defined (this can be done in the Makefile * or in jconfig.h). * (When the core library supports data precision reduction, a cleaner * implementation will be to ask for that instead.) */ #if BITS_IN_JSAMPLE == 8 #define PUTPPMSAMPLE(ptr, v) … #define BYTESPERSAMPLE … #define PPM_MAXVAL … #else #ifdef PPM_NORAWWORD #define PUTPPMSAMPLE … #define BYTESPERSAMPLE … #define PPM_MAXVAL … #else /* The word-per-sample format always puts the MSB first. */ #define PUTPPMSAMPLE … #define BYTESPERSAMPLE … #define PPM_MAXVAL … #endif #endif /* * When JSAMPLE is the same size as char, we can just fwrite() the * decompressed data to the PPM or PGM file. */ /* Private version of data destination object */ ppm_dest_struct; ppm_dest_ptr; /* * Write some pixel data. * In this module rows_supplied will always be 1. * * put_pixel_rows handles the "normal" 8-bit case where the decompressor * output buffer is physically the same as the fwrite buffer. */ METHODDEF(void) put_pixel_rows(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, JDIMENSION rows_supplied) { … } /* * This code is used when we have to copy the data and apply a pixel * format translation. Typically this only happens in 12-bit mode. */ METHODDEF(void) copy_pixel_rows(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, JDIMENSION rows_supplied) { … } /* * Convert extended RGB to RGB. */ METHODDEF(void) put_rgb(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, JDIMENSION rows_supplied) { … } /* * Convert CMYK to RGB. */ METHODDEF(void) put_cmyk(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, JDIMENSION rows_supplied) { … } /* * Write some pixel data when color quantization is in effect. * We have to demap the color index values to straight data. */ METHODDEF(void) put_demapped_rgb(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, JDIMENSION rows_supplied) { … } METHODDEF(void) put_demapped_gray(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo, JDIMENSION rows_supplied) { … } /* * Startup: write the file header. */ METHODDEF(void) start_output_ppm(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) { … } /* * Finish up at the end of the file. */ METHODDEF(void) finish_output_ppm(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) { … } /* * Re-calculate buffer dimensions based on output dimensions. */ METHODDEF(void) calc_buffer_dimensions_ppm(j_decompress_ptr cinfo, djpeg_dest_ptr dinfo) { … } /* * The module selection routine for PPM format output. */ GLOBAL(djpeg_dest_ptr) jinit_write_ppm(j_decompress_ptr cinfo) { … } #endif /* PPM_SUPPORTED */