亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wrppm.c

?? JPEG source code converts the image into compressed format
?? C
字號:
/*
 * wrppm.c
 *
 * Copyright (C) 1991-1996, 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 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 "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)  *ptr++ = (char) (v)
#define BYTESPERSAMPLE 1
#define PPM_MAXVAL 255
#else
#ifdef PPM_NORAWWORD
#define PUTPPMSAMPLE(ptr,v)  *ptr++ = (char) ((v) >> (BITS_IN_JSAMPLE-8))
#define BYTESPERSAMPLE 1
#define PPM_MAXVAL 255
#else
/* The word-per-sample format always puts the LSB first. */
#define PUTPPMSAMPLE(ptr,v)			\
	{ register int val_ = v;		\
	  *ptr++ = (char) (val_ & 0xFF);	\
	  *ptr++ = (char) ((val_ >> 8) & 0xFF);	\
	}
#define BYTESPERSAMPLE 2
#define PPM_MAXVAL ((1<<BITS_IN_JSAMPLE)-1)
#endif
#endif


/*
 * When JSAMPLE is the same size as char, we can just fwrite() the
 * decompressed data to the PPM or PGM file.  On PCs, in order to make this
 * work the output buffer must be allocated in near data space, because we are
 * assuming small-data memory model wherein fwrite() can't reach far memory.
 * If you need to process very wide images on a PC, you might have to compile
 * in large-memory model, or else replace fwrite() with a putc() loop ---
 * which will be much slower.
 */


/* Private version of data destination object */

typedef struct {
  struct djpeg_dest_struct pub;	/* public fields */

  /* Usually these two pointers point to the same place: */
  char *iobuffer;		/* fwrite's I/O buffer */
  JSAMPROW pixrow;		/* decompressor output buffer */
  size_t buffer_width;		/* width of I/O buffer */
  JDIMENSION samples_per_row;	/* JSAMPLEs per output row */
} ppm_dest_struct;

typedef 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)
{
  ppm_dest_ptr dest = (ppm_dest_ptr) dinfo;

  (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width);
}


/*
 * 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)
{
  ppm_dest_ptr dest = (ppm_dest_ptr) dinfo;
  register char * bufferptr;
  register JSAMPROW ptr;
  register JDIMENSION col;

  ptr = dest->pub.buffer[0];
  bufferptr = dest->iobuffer;
  for (col = dest->samples_per_row; col > 0; col--) {
    PUTPPMSAMPLE(bufferptr, GETJSAMPLE(*ptr++));
  }
  (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width);
}


/*
 * 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)
{
  ppm_dest_ptr dest = (ppm_dest_ptr) dinfo;
  register char * bufferptr;
  register int pixval;
  register JSAMPROW ptr;
  register JSAMPROW color_map0 = cinfo->colormap[0];
  register JSAMPROW color_map1 = cinfo->colormap[1];
  register JSAMPROW color_map2 = cinfo->colormap[2];
  register JDIMENSION col;

  ptr = dest->pub.buffer[0];
  bufferptr = dest->iobuffer;
  for (col = cinfo->output_width; col > 0; col--) {
    pixval = GETJSAMPLE(*ptr++);
    PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map0[pixval]));
    PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map1[pixval]));
    PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map2[pixval]));
  }
  (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width);
}


METHODDEF(void)
put_demapped_gray (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo,
		   JDIMENSION rows_supplied)
{
  ppm_dest_ptr dest = (ppm_dest_ptr) dinfo;
  register char * bufferptr;
  register JSAMPROW ptr;
  register JSAMPROW color_map = cinfo->colormap[0];
  register JDIMENSION col;

  ptr = dest->pub.buffer[0];
  bufferptr = dest->iobuffer;
  for (col = cinfo->output_width; col > 0; col--) {
    PUTPPMSAMPLE(bufferptr, GETJSAMPLE(color_map[GETJSAMPLE(*ptr++)]));
  }
  (void) JFWRITE(dest->pub.output_file, dest->iobuffer, dest->buffer_width);
}


/*
 * Startup: write the file header.
 */

METHODDEF(void)
start_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo)
{
  ppm_dest_ptr dest = (ppm_dest_ptr) dinfo;

  /* Emit file header */
  switch (cinfo->out_color_space) {
  case JCS_GRAYSCALE:
    /* emit header for raw PGM format */
    fprintf(dest->pub.output_file, "P5\n%ld %ld\n%d\n",
	    (long) cinfo->output_width, (long) cinfo->output_height,
	    PPM_MAXVAL);
    break;
  case JCS_RGB:
    /* emit header for raw PPM format */
    fprintf(dest->pub.output_file, "P6\n%ld %ld\n%d\n",
	    (long) cinfo->output_width, (long) cinfo->output_height,
	    PPM_MAXVAL);
    break;
  default:
    ERREXIT(cinfo, JERR_PPM_COLORSPACE);
  }
}


/*
 * Finish up at the end of the file.
 */

METHODDEF(void)
finish_output_ppm (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo)
{
  /* Make sure we wrote the output file OK */
  fflush(dinfo->output_file);
  if (ferror(dinfo->output_file))
    ERREXIT(cinfo, JERR_FILE_WRITE);
}


/*
 * The module selection routine for PPM format output.
 */

GLOBAL(djpeg_dest_ptr)
jinit_write_ppm (j_decompress_ptr cinfo)
{
  ppm_dest_ptr dest;

  /* Create module interface object, fill in method pointers */
  dest = (ppm_dest_ptr)
      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				  SIZEOF(ppm_dest_struct));
  dest->pub.start_output = start_output_ppm;
  dest->pub.finish_output = finish_output_ppm;

  /* Calculate output image dimensions so we can allocate space */
  jpeg_calc_output_dimensions(cinfo);

  /* Create physical I/O buffer.  Note we make this near on a PC. */
  dest->samples_per_row = cinfo->output_width * cinfo->out_color_components;
  dest->buffer_width = dest->samples_per_row * (BYTESPERSAMPLE * SIZEOF(char));
  dest->iobuffer = (char *) (*cinfo->mem->alloc_small)
    ((j_common_ptr) cinfo, JPOOL_IMAGE, dest->buffer_width);

  if (cinfo->quantize_colors || BITS_IN_JSAMPLE != 8 ||
      SIZEOF(JSAMPLE) != SIZEOF(char)) {
    /* When quantizing, we need an output buffer for colormap indexes
     * that's separate from the physical I/O buffer.  We also need a
     * separate buffer if pixel format translation must take place.
     */
    dest->pub.buffer = (*cinfo->mem->alloc_sarray)
      ((j_common_ptr) cinfo, JPOOL_IMAGE,
       cinfo->output_width * cinfo->output_components, (JDIMENSION) 1);
    dest->pub.buffer_height = 1;
    if (! cinfo->quantize_colors)
      dest->pub.put_pixel_rows = copy_pixel_rows;
    else if (cinfo->out_color_space == JCS_GRAYSCALE)
      dest->pub.put_pixel_rows = put_demapped_gray;
    else
      dest->pub.put_pixel_rows = put_demapped_rgb;
  } else {
    /* We will fwrite() directly from decompressor output buffer. */
    /* Synthesize a JSAMPARRAY pointer structure */
    /* Cast here implies near->far pointer conversion on PCs */
    dest->pixrow = (JSAMPROW) dest->iobuffer;
    dest->pub.buffer = & dest->pixrow;
    dest->pub.buffer_height = 1;
    dest->pub.put_pixel_rows = put_pixel_rows;
  }

  return (djpeg_dest_ptr) dest;
}

#endif /* PPM_SUPPORTED */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久婷婷国产综合精品电影 | 精品国偷自产国产一区| 99久久久久免费精品国产| 亚洲成人激情综合网| 亚洲精品国产一区二区精华液| 久久久www成人免费无遮挡大片| 欧美一区二区三区婷婷月色| 欧美日本韩国一区二区三区视频| 色综合激情五月| av一二三不卡影片| 成人动漫在线一区| 国内精品不卡在线| 国产露脸91国语对白| 国产一区二区三区电影在线观看| 美日韩一区二区| 美国十次了思思久久精品导航| 日韩精品免费视频人成| 亚洲欧洲精品天堂一级 | 成人av集中营| 高清不卡一二三区| 伦理电影国产精品| 老色鬼精品视频在线观看播放| 青青草97国产精品免费观看 | 成人av在线网站| 国产成人鲁色资源国产91色综 | 91小视频在线免费看| 丁香激情综合五月| 国产精品系列在线播放| 国产v综合v亚洲欧| 成人av综合在线| 一本色道久久综合精品竹菊| 色就色 综合激情| 91久久人澡人人添人人爽欧美| 91高清在线观看| 一本大道综合伊人精品热热 | 91日韩精品一区| 91麻豆国产福利精品| 色88888久久久久久影院野外| 欧美在线观看一二区| 色综合久久88色综合天天免费| 欧美日韩综合在线| 欧美三级中文字幕在线观看| 91在线视频官网| 欧美性猛交xxxx乱大交退制版 | 精品亚洲国产成人av制服丝袜| 亚洲午夜在线观看视频在线| 婷婷一区二区三区| 国产一区二区在线看| 成人小视频免费在线观看| 在线日韩一区二区| 欧美一区二区免费观在线| 久久久蜜桃精品| 国产精品拍天天在线| 一区二区三区四区乱视频| 日韩电影一区二区三区| 国产69精品久久久久777| av高清久久久| 91精品国产91久久久久久一区二区| 精品国产百合女同互慰| 欧美国产成人精品| 国产欧美一区二区精品性色超碰| ●精品国产综合乱码久久久久| 一区二区三区四区不卡视频| 日本aⅴ免费视频一区二区三区| 国产**成人网毛片九色| www.亚洲在线| 日韩欧美亚洲另类制服综合在线| 国产精品乱码一区二区三区软件| 亚洲美女少妇撒尿| 美女被吸乳得到大胸91| 99久久免费精品高清特色大片| 欧美一二三区在线| 亚洲日本一区二区| 一区二区三区日韩在线观看| 欧美aaa在线| 成人激情免费视频| 欧美精品在线视频| 亚洲欧洲美洲综合色网| 极品销魂美女一区二区三区| 在线视频欧美精品| 国产精品毛片无遮挡高清| 蜜桃一区二区三区在线| 丁香啪啪综合成人亚洲小说| 欧美系列亚洲系列| 中文字幕中文字幕一区二区| 精品一区二区综合| 欧美日韩一级视频| 国产精品情趣视频| 国产尤物一区二区| 91精品麻豆日日躁夜夜躁| 亚洲美女免费视频| 精品一二三四区| 91麻豆精品国产综合久久久久久| 国产精品女同一区二区三区| 国内精品国产成人国产三级粉色 | 久久精品视频一区二区| 蜜桃在线一区二区三区| 欧美日韩二区三区| 一片黄亚洲嫩模| 99久久精品国产麻豆演员表| 久久老女人爱爱| 久久精品国产亚洲aⅴ| 欧美精品v国产精品v日韩精品 | 欧美浪妇xxxx高跟鞋交| 亚洲狼人国产精品| caoporn国产精品| 久久这里只有精品6| 美女视频一区二区三区| 欧美视频完全免费看| 中文字幕av一区 二区| 黑人精品欧美一区二区蜜桃| 欧美一区二区黄色| 青青草成人在线观看| 91精品国产综合久久小美女| 亚洲成av人在线观看| 欧美日韩中文字幕精品| 亚洲综合一区二区三区| 日本二三区不卡| 亚洲一区欧美一区| 欧美日韩精品系列| 亚洲成a人v欧美综合天堂| 欧美日韩成人综合天天影院 | 亚洲精品v日韩精品| 东方欧美亚洲色图在线| 国产欧美一区二区精品忘忧草| 国产一区二区三区不卡在线观看| 国产视频一区二区在线观看| 成人中文字幕在线| 亚洲视频免费看| 欧美在线综合视频| 日韩专区在线视频| 日韩欧美一级在线播放| 久久99精品久久久| 国产日韩在线不卡| 国产a精品视频| 日韩一区欧美一区| 欧美系列一区二区| 蜜桃在线一区二区三区| 久久久久久99久久久精品网站| 狠狠色狠狠色合久久伊人| 日韩欧美久久久| 久久99精品久久久久| 2020国产精品自拍| 成人自拍视频在线观看| 一区二区三区四区不卡在线 | 色一情一乱一乱一91av| 一区二区久久久久| 欧美一区二区不卡视频| 国产精品夜夜爽| 亚洲啪啪综合av一区二区三区| 91成人在线观看喷潮| 日韩高清不卡一区二区三区| 欧美精品一区二区三区视频 | 亚洲国产综合视频在线观看| 日韩一区二区精品葵司在线| 国产精品自拍一区| 一区二区三区精品久久久| 欧美影院精品一区| 亚洲h在线观看| 久久这里只有精品首页| 91老师国产黑色丝袜在线| 舔着乳尖日韩一区| 国产午夜精品久久久久久久| 在线免费精品视频| 国模娜娜一区二区三区| 亚洲午夜在线观看视频在线| 国产精品午夜电影| 精品欧美久久久| 欧洲精品在线观看| a级精品国产片在线观看| 麻豆国产精品一区二区三区| 亚洲免费观看视频| 中文字幕免费一区| 久久综合久久鬼色| 777精品伊人久久久久大香线蕉| 色综合激情五月| www.日韩大片| 国产99久久久国产精品| 欧美96一区二区免费视频| 亚洲一区二区在线免费观看视频| 国产精品毛片久久久久久久| 久久这里只有精品6| 日韩一级免费观看| 欧美精品久久久久久久久老牛影院| 97精品超碰一区二区三区| 国产成人av在线影院| 九九九精品视频| 青青草国产成人99久久| 婷婷开心久久网| 亚洲一二三四在线观看| 中文字幕五月欧美| 欧美国产一区二区在线观看| 精品久久久久久无| 欧美一区二区三区人| 555www色欧美视频| 欧美福利电影网| 欧美日韩欧美一区二区| 欧美三级中文字| 欧美日韩久久久久久| 欧美日韩在线亚洲一区蜜芽|