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

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

?? wrrle.c

?? 這是JPEG解碼、編碼的源代碼
?? C
字號:
/*
 * wrrle.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 RLE format.
 * The Utah Raster Toolkit library is required (version 3.1 or later).
 *
 * These routines may need modification for non-Unix environments or
 * specialized applications.  As they stand, they assume output to
 * an ordinary stdio stream.
 *
 * Based on code contributed by Mike Lijewski,
 * with updates from Robert Hutchinson.
 */

#include "cdjpeg.h"		/* Common decls for cjpeg/djpeg applications */

#ifdef RLE_SUPPORTED

/* rle.h is provided by the Utah Raster Toolkit. */

#include <rle.h>

/*
 * We assume that JSAMPLE has the same representation as rle_pixel,
 * to wit, "unsigned char".  Hence we can't cope with 12- or 16-bit samples.
 */

#if BITS_IN_JSAMPLE != 8
  Sorry, this code only copes with 8-bit JSAMPLEs. /* deliberate syntax err */
#endif


/*
 * Since RLE stores scanlines bottom-to-top, we have to invert the image
 * from JPEG's top-to-bottom order.  To do this, we save the outgoing data
 * in a virtual array during put_pixel_row calls, then actually emit the
 * RLE file during finish_output.
 */


/*
 * For now, if we emit an RLE color map then it is always 256 entries long,
 * though not all of the entries need be used.
 */

#define CMAPBITS	8
#define CMAPLENGTH	(1<<(CMAPBITS))

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

  jvirt_sarray_ptr image;	/* virtual array to store the output image */
  rle_map *colormap;	 	/* RLE-style color map, or NULL if none */
  rle_pixel **rle_row;		/* To pass rows to rle_putrow() */

} rle_dest_struct;

typedef rle_dest_struct * rle_dest_ptr;

/* Forward declarations */
METHODDEF(void) rle_put_pixel_rows
    JPP((j_decompress_ptr cinfo, djpeg_dest_ptr dinfo,
	 JDIMENSION rows_supplied));


/*
 * Write the file header.
 *
 * In this module it's easier to wait till finish_output to write anything.
 */

METHODDEF(void)
start_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo)
{
  rle_dest_ptr dest = (rle_dest_ptr) dinfo;
  size_t cmapsize;
  int i, ci;
#ifdef PROGRESS_REPORT
  cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress;
#endif

  /*
   * Make sure the image can be stored in RLE format.
   *
   * - RLE stores image dimensions as *signed* 16 bit integers.  JPEG
   *   uses unsigned, so we have to check the width.
   *
   * - Colorspace is expected to be grayscale or RGB.
   *
   * - The number of channels (components) is expected to be 1 (grayscale/
   *   pseudocolor) or 3 (truecolor/directcolor).
   *   (could be 2 or 4 if using an alpha channel, but we aren't)
   */

  if (cinfo->output_width > 32767 || cinfo->output_height > 32767)
    ERREXIT2(cinfo, JERR_RLE_DIMENSIONS, cinfo->output_width, 
	     cinfo->output_height);

  if (cinfo->out_color_space != JCS_GRAYSCALE &&
      cinfo->out_color_space != JCS_RGB)
    ERREXIT(cinfo, JERR_RLE_COLORSPACE);

  if (cinfo->output_components != 1 && cinfo->output_components != 3)
    ERREXIT1(cinfo, JERR_RLE_TOOMANYCHANNELS, cinfo->num_components);

  /* Convert colormap, if any, to RLE format. */

  dest->colormap = NULL;

  if (cinfo->quantize_colors) {
    /* Allocate storage for RLE-style cmap, zero any extra entries */
    cmapsize = cinfo->out_color_components * CMAPLENGTH * SIZEOF(rle_map);
    dest->colormap = (rle_map *) (*cinfo->mem->alloc_small)
      ((j_common_ptr) cinfo, JPOOL_IMAGE, cmapsize);
    MEMZERO(dest->colormap, cmapsize);

    /* Save away data in RLE format --- note 8-bit left shift! */
    /* Shifting would need adjustment for JSAMPLEs wider than 8 bits. */
    for (ci = 0; ci < cinfo->out_color_components; ci++) {
      for (i = 0; i < cinfo->actual_number_of_colors; i++) {
        dest->colormap[ci * CMAPLENGTH + i] =
          GETJSAMPLE(cinfo->colormap[ci][i]) << 8;
      }
    }
  }

  /* Set the output buffer to the first row */
  dest->pub.buffer = (*cinfo->mem->access_virt_sarray)
    ((j_common_ptr) cinfo, dest->image, (JDIMENSION) 0, (JDIMENSION) 1, TRUE);
  dest->pub.buffer_height = 1;

  dest->pub.put_pixel_rows = rle_put_pixel_rows;

#ifdef PROGRESS_REPORT
  if (progress != NULL) {
    progress->total_extra_passes++;  /* count file writing as separate pass */
  }
#endif
}


/*
 * Write some pixel data.
 *
 * This routine just saves the data away in a virtual array.
 */

METHODDEF(void)
rle_put_pixel_rows (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo,
		    JDIMENSION rows_supplied)
{
  rle_dest_ptr dest = (rle_dest_ptr) dinfo;

  if (cinfo->output_scanline < cinfo->output_height) {
    dest->pub.buffer = (*cinfo->mem->access_virt_sarray)
      ((j_common_ptr) cinfo, dest->image,
       cinfo->output_scanline, (JDIMENSION) 1, TRUE);
  }
}

/*
 * Finish up at the end of the file.
 *
 * Here is where we really output the RLE file.
 */

METHODDEF(void)
finish_output_rle (j_decompress_ptr cinfo, djpeg_dest_ptr dinfo)
{
  rle_dest_ptr dest = (rle_dest_ptr) dinfo;
  rle_hdr header;		/* Output file information */
  rle_pixel **rle_row, *red, *green, *blue;
  JSAMPROW output_row;
  char cmapcomment[80];
  int row, col;
  int ci;
#ifdef PROGRESS_REPORT
  cd_progress_ptr progress = (cd_progress_ptr) cinfo->progress;
#endif

  /* Initialize the header info */
  header = *rle_hdr_init(NULL);
  header.rle_file = dest->pub.output_file;
  header.xmin     = 0;
  header.xmax     = cinfo->output_width  - 1;
  header.ymin     = 0;
  header.ymax     = cinfo->output_height - 1;
  header.alpha    = 0;
  header.ncolors  = cinfo->output_components;
  for (ci = 0; ci < cinfo->output_components; ci++) {
    RLE_SET_BIT(header, ci);
  }
  if (cinfo->quantize_colors) {
    header.ncmap   = cinfo->out_color_components;
    header.cmaplen = CMAPBITS;
    header.cmap    = dest->colormap;
    /* Add a comment to the output image with the true colormap length. */
    sprintf(cmapcomment, "color_map_length=%d", cinfo->actual_number_of_colors);
    rle_putcom(cmapcomment, &header);
  }

  /* Emit the RLE header and color map (if any) */
  rle_put_setup(&header);

  /* Now output the RLE data from our virtual array.
   * We assume here that (a) rle_pixel is represented the same as JSAMPLE,
   * and (b) we are not on a machine where FAR pointers differ from regular.
   */

#ifdef PROGRESS_REPORT
  if (progress != NULL) {
    progress->pub.pass_limit = cinfo->output_height;
    progress->pub.pass_counter = 0;
    (*progress->pub.progress_monitor) ((j_common_ptr) cinfo);
  }
#endif

  if (cinfo->output_components == 1) {
    for (row = cinfo->output_height-1; row >= 0; row--) {
      rle_row = (rle_pixel **) (*cinfo->mem->access_virt_sarray)
        ((j_common_ptr) cinfo, dest->image,
	 (JDIMENSION) row, (JDIMENSION) 1, FALSE);
      rle_putrow(rle_row, (int) cinfo->output_width, &header);
#ifdef PROGRESS_REPORT
      if (progress != NULL) {
        progress->pub.pass_counter++;
        (*progress->pub.progress_monitor) ((j_common_ptr) cinfo);
      }
#endif
    }
  } else {
    for (row = cinfo->output_height-1; row >= 0; row--) {
      rle_row = (rle_pixel **) dest->rle_row;
      output_row = * (*cinfo->mem->access_virt_sarray)
        ((j_common_ptr) cinfo, dest->image,
	 (JDIMENSION) row, (JDIMENSION) 1, FALSE);
      red = rle_row[0];
      green = rle_row[1];
      blue = rle_row[2];
      for (col = cinfo->output_width; col > 0; col--) {
        *red++ = GETJSAMPLE(*output_row++);
        *green++ = GETJSAMPLE(*output_row++);
        *blue++ = GETJSAMPLE(*output_row++);
      }
      rle_putrow(rle_row, (int) cinfo->output_width, &header);
#ifdef PROGRESS_REPORT
      if (progress != NULL) {
        progress->pub.pass_counter++;
        (*progress->pub.progress_monitor) ((j_common_ptr) cinfo);
      }
#endif
    }
  }

#ifdef PROGRESS_REPORT
  if (progress != NULL)
    progress->completed_extra_passes++;
#endif

  /* Emit file trailer */
  rle_puteof(&header);
  fflush(dest->pub.output_file);
  if (ferror(dest->pub.output_file))
    ERREXIT(cinfo, JERR_FILE_WRITE);
}


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

GLOBAL(djpeg_dest_ptr)
jinit_write_rle (j_decompress_ptr cinfo)
{
  rle_dest_ptr dest;

  /* Create module interface object, fill in method pointers */
  dest = (rle_dest_ptr)
      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
                                  SIZEOF(rle_dest_struct));
  dest->pub.start_output = start_output_rle;
  dest->pub.finish_output = finish_output_rle;

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

  /* Allocate a work array for output to the RLE library. */
  dest->rle_row = (*cinfo->mem->alloc_sarray)
    ((j_common_ptr) cinfo, JPOOL_IMAGE,
     cinfo->output_width, (JDIMENSION) cinfo->output_components);

  /* Allocate a virtual array to hold the image. */
  dest->image = (*cinfo->mem->request_virt_sarray)
    ((j_common_ptr) cinfo, JPOOL_IMAGE, FALSE,
     (JDIMENSION) (cinfo->output_width * cinfo->output_components),
     cinfo->output_height, (JDIMENSION) 1);

  return (djpeg_dest_ptr) dest;
}

#endif /* RLE_SUPPORTED */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草91视频| 日韩一区二区高清| 2023国产精华国产精品| 亚洲v精品v日韩v欧美v专区| 99国产精品久久久| 国产精品久久久久久妇女6080| 国产一区二区三区香蕉| 欧美日韩国产天堂| 亚洲小说欧美激情另类| 欧美日韩亚洲高清一区二区| 一区二区三区美女| 欧美中文字幕不卡| 亚洲免费资源在线播放| 972aa.com艺术欧美| 亚洲欧洲一区二区在线播放| fc2成人免费人成在线观看播放| 国产午夜精品一区二区三区视频 | 国产精品私人自拍| 日本中文字幕一区| 欧美一区二区三级| 美日韩一级片在线观看| 欧美日免费三级在线| 一区二区三区色| 欧美三级视频在线播放| 亚洲va欧美va人人爽| 欧美久久久久中文字幕| 蜜乳av一区二区| 26uuu精品一区二区三区四区在线| 国内偷窥港台综合视频在线播放| 日韩一级精品视频在线观看| 国产综合久久久久久久久久久久| 国产亚洲女人久久久久毛片| 成人性生交大片免费看在线播放 | 欧美三级蜜桃2在线观看| 午夜欧美2019年伦理| 日韩欧美亚洲一区二区| 九九视频精品免费| 欧美激情在线一区二区三区| 91香蕉视频在线| 亚洲国产另类精品专区| 精品久久久久久久久久久久久久久 | 国模一区二区三区白浆| 国产精品视频免费看| 成人免费高清视频| 亚洲一区二区视频在线观看| 91精品午夜视频| 国v精品久久久网| 一区二区三区四区在线免费观看| 欧美精品在线观看播放| 国产成人超碰人人澡人人澡| 亚洲精品写真福利| 日韩美女视频在线| 色婷婷亚洲综合| 久久精品国产**网站演员| 中文字幕免费不卡| 这里只有精品视频在线观看| 成人综合婷婷国产精品久久蜜臀| 亚洲自拍与偷拍| 日本一区二区成人在线| 欧美电影在哪看比较好| 99re亚洲国产精品| 捆绑调教美女网站视频一区| 亚洲欧洲制服丝袜| 欧美电影免费观看高清完整版在| 播五月开心婷婷综合| 日本成人在线不卡视频| 亚洲蜜臀av乱码久久精品 | 久久99国产精品尤物| 亚洲另类中文字| 国产婷婷色一区二区三区四区| 欧美在线高清视频| 国产91清纯白嫩初高中在线观看| 欧美aaa在线| 国产欧美精品区一区二区三区| 91精品一区二区三区在线观看| 99久精品国产| 国产99久久久久| 精品亚洲porn| 美女视频黄久久| 亚洲电影第三页| 一区二区三区中文字幕电影| 国产精品短视频| 欧美国产综合色视频| 日韩一区二区免费视频| 欧美日韩国产在线播放网站| 一本大道久久a久久综合| 粉嫩av一区二区三区粉嫩| 国产综合色视频| 精品一区中文字幕| 男女性色大片免费观看一区二区| 亚洲成在线观看| 亚洲一区二区三区精品在线| 亚洲欧美aⅴ...| 亚洲欧美自拍偷拍| 国产精品视频你懂的| 国产精品素人视频| 中文一区在线播放| 国产喂奶挤奶一区二区三区| wwww国产精品欧美| 精品国产99国产精品| 欧美精品一区二区三区蜜桃视频| 欧美一区二区三区日韩视频| 欧美人xxxx| 538prom精品视频线放| 8x8x8国产精品| 日韩视频一区二区三区| 精品区一区二区| 国产亚洲1区2区3区| 国产女人18水真多18精品一级做| 欧美激情一区三区| 国产精品久久久久久久久免费樱桃 | 亚洲一区在线观看视频| 一区av在线播放| 五月天亚洲婷婷| 麻豆国产精品视频| 国产麻豆视频一区| 99久久国产综合色|国产精品| 91麻豆免费观看| 色婷婷狠狠综合| 欧美日韩免费高清一区色橹橹 | 精品亚洲成a人在线观看| 国产一区二区精品久久| 波多野结衣91| 欧美视频精品在线观看| 欧美一级理论片| 久久女同性恋中文字幕| 亚洲三级电影全部在线观看高清| 一区二区三区美女| 麻豆一区二区在线| 成人午夜私人影院| 欧美情侣在线播放| 久久午夜老司机| 亚洲欧美一区二区三区久本道91| 天天爽夜夜爽夜夜爽精品视频| 日本vs亚洲vs韩国一区三区二区| 国产精品18久久久久久久久久久久 | 欧美精品乱码久久久久久 | 色一区在线观看| 91精品国产入口| 日本一区免费视频| 亚洲sss视频在线视频| 国产成人免费9x9x人网站视频| 亚洲免费大片在线观看| 久久久久久久综合日本| 久久影院午夜片一区| 亚洲三级理论片| 国产乱色国产精品免费视频| 欧美日韩三级一区二区| 中文字幕av在线一区二区三区| 蜜桃av噜噜一区| 精品视频色一区| 一区二区三区蜜桃网| 成人丝袜视频网| 久久老女人爱爱| 精品一区二区综合| 欧美一卡在线观看| 亚洲午夜av在线| 欧洲一区二区av| 亚洲色图在线播放| 91在线视频网址| 亚洲国产高清在线| 国产成人免费视频网站高清观看视频| 欧美一区二区三区视频免费播放| 亚洲国产精品视频| 色婷婷久久久综合中文字幕 | 91精品免费观看| 亚洲一二三区视频在线观看| 色婷婷久久久亚洲一区二区三区| 中文字幕在线一区二区三区| 国产不卡视频一区| 国产日韩欧美不卡| 国产成人精品免费| 亚洲国产精品ⅴa在线观看| 国产成人小视频| 国产精品全国免费观看高清| 国产成人综合在线观看| 久久久久久久久伊人| 国产精品自产自拍| 国产日本欧洲亚洲| 99久久夜色精品国产网站| 中文字幕一区二区三区精华液 | 精品久久久久久久一区二区蜜臀| 精品在线亚洲视频| 久久久91精品国产一区二区精品 | 狠狠色综合日日| 久久久精品综合| 99久久久久久99| 一区二区三区鲁丝不卡| 欧美日韩国产另类不卡| 免播放器亚洲一区| 久久精品人人做人人综合| 处破女av一区二区| 亚洲精品成a人| 欧美日韩色一区| 久久国产精品免费| 欧美国产精品中文字幕| 日本乱码高清不卡字幕| 日本成人在线电影网| 国产三级精品视频| 色婷婷激情久久|