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

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

?? jdcolor.c

?? JPEG算法源代碼(包含JPEG的各種算法實現的VC++的源代碼)
?? C
字號:
/*
 * jdcolor.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 output colorspace conversion routines.
 */

#define JPEG_INTERNALS
#include "jinclude.h"
#include "jpeglib.h"


/* Private subobject */

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

  /* Private state for YCC->RGB conversion */
  int * Cr_r_tab;		/* => table for Cr to R conversion */
  int * Cb_b_tab;		/* => table for Cb to B conversion */
  INT32 * Cr_g_tab;		/* => table for Cr to G conversion */
  INT32 * Cb_g_tab;		/* => table for Cb to G conversion */
} my_color_deconverter;

typedef my_color_deconverter * my_cconvert_ptr;


/**************** YCbCr -> RGB conversion: most common case **************/

/*
 * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
 * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
 * The conversion equations to be implemented are therefore
 *	R = Y                + 1.40200 * Cr
 *	G = Y - 0.34414 * Cb - 0.71414 * Cr
 *	B = Y + 1.77200 * Cb
 * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
 * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
 *
 * To avoid floating-point arithmetic, we represent the fractional constants
 * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
 * the products by 2^16, with appropriate rounding, to get the correct answer.
 * Notice that Y, being an integral input, does not contribute any fraction
 * so it need not participate in the rounding.
 *
 * For even more speed, we avoid doing any multiplications in the inner loop
 * by precalculating the constants times Cb and Cr for all possible values.
 * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
 * for 12-bit samples it is still acceptable.  It's not very reasonable for
 * 16-bit samples, but if you want lossless storage you shouldn't be changing
 * colorspace anyway.
 * The Cr=>R and Cb=>B values can be rounded to integers in advance; the
 * values for the G calculation are left scaled up, since we must add them
 * together before rounding.
 */

#define SCALEBITS	16	/* speediest right-shift on some machines */
#define ONE_HALF	((INT32) 1 << (SCALEBITS-1))
#define FIX(x)		((INT32) ((x) * (1L<<SCALEBITS) + 0.5))


/*
 * Initialize tables for YCC->RGB colorspace conversion.
 */

LOCAL(void)
build_ycc_rgb_table (j_decompress_ptr cinfo)
{
  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
  int i;
  INT32 x;
  SHIFT_TEMPS

  cconvert->Cr_r_tab = (int *)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				(MAXJSAMPLE+1) * SIZEOF(int));
  cconvert->Cb_b_tab = (int *)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				(MAXJSAMPLE+1) * SIZEOF(int));
  cconvert->Cr_g_tab = (INT32 *)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				(MAXJSAMPLE+1) * SIZEOF(INT32));
  cconvert->Cb_g_tab = (INT32 *)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				(MAXJSAMPLE+1) * SIZEOF(INT32));

  for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
    /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
    /* The Cb or Cr value we are thinking of is x = i - CENTERJSAMPLE */
    /* Cr=>R value is nearest int to 1.40200 * x */
    cconvert->Cr_r_tab[i] = (int)
		    RIGHT_SHIFT(FIX(1.40200) * x + ONE_HALF, SCALEBITS);
    /* Cb=>B value is nearest int to 1.77200 * x */
    cconvert->Cb_b_tab[i] = (int)
		    RIGHT_SHIFT(FIX(1.77200) * x + ONE_HALF, SCALEBITS);
    /* Cr=>G value is scaled-up -0.71414 * x */
    cconvert->Cr_g_tab[i] = (- FIX(0.71414)) * x;
    /* Cb=>G value is scaled-up -0.34414 * x */
    /* We also add in ONE_HALF so that need not do it in inner loop */
    cconvert->Cb_g_tab[i] = (- FIX(0.34414)) * x + ONE_HALF;
  }
}


/*
 * Convert some rows of samples to the output colorspace.
 *
 * Note that we change from noninterleaved, one-plane-per-component format
 * to interleaved-pixel format.  The output buffer is therefore three times
 * as wide as the input buffer.
 * A starting row offset is provided only for the input buffer.  The caller
 * can easily adjust the passed output_buf value to accommodate any row
 * offset required on that side.
 */

METHODDEF(void)
ycc_rgb_convert (j_decompress_ptr cinfo,
		 JSAMPIMAGE input_buf, JDIMENSION input_row,
		 JSAMPARRAY output_buf, int num_rows)
{
  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
  register int y, cb, cr;
  register JSAMPROW outptr;
  register JSAMPROW inptr0, inptr1, inptr2;
  register JDIMENSION col;
  JDIMENSION num_cols = cinfo->output_width;
  /* copy these pointers into registers if possible */
  register JSAMPLE * range_limit = cinfo->sample_range_limit;
  register int * Crrtab = cconvert->Cr_r_tab;
  register int * Cbbtab = cconvert->Cb_b_tab;
  register INT32 * Crgtab = cconvert->Cr_g_tab;
  register INT32 * Cbgtab = cconvert->Cb_g_tab;
  SHIFT_TEMPS

  while (--num_rows >= 0) {
    inptr0 = input_buf[0][input_row];
    inptr1 = input_buf[1][input_row];
    inptr2 = input_buf[2][input_row];
    input_row++;
    outptr = *output_buf++;
    for (col = 0; col < num_cols; col++) {
      y  = GETJSAMPLE(inptr0[col]);
      cb = GETJSAMPLE(inptr1[col]);
      cr = GETJSAMPLE(inptr2[col]);
      /* Range-limiting is essential due to noise introduced by DCT losses. */
      outptr[RGB_RED] =   range_limit[y + Crrtab[cr]];
      outptr[RGB_GREEN] = range_limit[y +
			      ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
						 SCALEBITS))];
      outptr[RGB_BLUE] =  range_limit[y + Cbbtab[cb]];
      outptr += RGB_PIXELSIZE;
    }
  }
}


/**************** Cases other than YCbCr -> RGB **************/


/*
 * Color conversion for no colorspace change: just copy the data,
 * converting from separate-planes to interleaved representation.
 */

METHODDEF(void)
null_convert (j_decompress_ptr cinfo,
	      JSAMPIMAGE input_buf, JDIMENSION input_row,
	      JSAMPARRAY output_buf, int num_rows)
{
  register JSAMPROW inptr, outptr;
  register JDIMENSION count;
  register int num_components = cinfo->num_components;
  JDIMENSION num_cols = cinfo->output_width;
  int ci;

  while (--num_rows >= 0) {
    for (ci = 0; ci < num_components; ci++) {
      inptr = input_buf[ci][input_row];
      outptr = output_buf[0] + ci;
      for (count = num_cols; count > 0; count--) {
	*outptr = *inptr++;	/* needn't bother with GETJSAMPLE() here */
	outptr += num_components;
      }
    }
    input_row++;
    output_buf++;
  }
}


/*
 * Color conversion for grayscale: just copy the data.
 * This also works for YCbCr -> grayscale conversion, in which
 * we just copy the Y (luminance) component and ignore chrominance.
 */

METHODDEF(void)
grayscale_convert (j_decompress_ptr cinfo,
		   JSAMPIMAGE input_buf, JDIMENSION input_row,
		   JSAMPARRAY output_buf, int num_rows)
{
  jcopy_sample_rows(input_buf[0], (int) input_row, output_buf, 0,
		    num_rows, cinfo->output_width);
}


/*
 * Adobe-style YCCK->CMYK conversion.
 * We convert YCbCr to R=1-C, G=1-M, and B=1-Y using the same
 * conversion as above, while passing K (black) unchanged.
 * We assume build_ycc_rgb_table has been called.
 */

METHODDEF(void)
ycck_cmyk_convert (j_decompress_ptr cinfo,
		   JSAMPIMAGE input_buf, JDIMENSION input_row,
		   JSAMPARRAY output_buf, int num_rows)
{
  my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
  register int y, cb, cr;
  register JSAMPROW outptr;
  register JSAMPROW inptr0, inptr1, inptr2, inptr3;
  register JDIMENSION col;
  JDIMENSION num_cols = cinfo->output_width;
  /* copy these pointers into registers if possible */
  register JSAMPLE * range_limit = cinfo->sample_range_limit;
  register int * Crrtab = cconvert->Cr_r_tab;
  register int * Cbbtab = cconvert->Cb_b_tab;
  register INT32 * Crgtab = cconvert->Cr_g_tab;
  register INT32 * Cbgtab = cconvert->Cb_g_tab;
  SHIFT_TEMPS

  while (--num_rows >= 0) {
    inptr0 = input_buf[0][input_row];
    inptr1 = input_buf[1][input_row];
    inptr2 = input_buf[2][input_row];
    inptr3 = input_buf[3][input_row];
    input_row++;
    outptr = *output_buf++;
    for (col = 0; col < num_cols; col++) {
      y  = GETJSAMPLE(inptr0[col]);
      cb = GETJSAMPLE(inptr1[col]);
      cr = GETJSAMPLE(inptr2[col]);
      /* Range-limiting is essential due to noise introduced by DCT losses. */
      outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])];	/* red */
      outptr[1] = range_limit[MAXJSAMPLE - (y +			/* green */
			      ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
						 SCALEBITS)))];
      outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])];	/* blue */
      /* K passes through unchanged */
      outptr[3] = inptr3[col];	/* don't need GETJSAMPLE here */
      outptr += 4;
    }
  }
}


/*
 * Empty method for start_pass.
 */

METHODDEF(void)
start_pass_dcolor (j_decompress_ptr cinfo)
{
  /* no work needed */
}


/*
 * Module initialization routine for output colorspace conversion.
 */

GLOBAL(void)
jinit_color_deconverter (j_decompress_ptr cinfo)
{
  my_cconvert_ptr cconvert;
  int ci;

  cconvert = (my_cconvert_ptr)
    (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
				SIZEOF(my_color_deconverter));
  cinfo->cconvert = (struct jpeg_color_deconverter *) cconvert;
  cconvert->pub.start_pass = start_pass_dcolor;

  /* Make sure num_components agrees with jpeg_color_space */
  switch (cinfo->jpeg_color_space) {
  case JCS_GRAYSCALE:
    if (cinfo->num_components != 1)
      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
    break;

  case JCS_RGB:
  case JCS_YCbCr:
    if (cinfo->num_components != 3)
      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
    break;

  case JCS_CMYK:
  case JCS_YCCK:
    if (cinfo->num_components != 4)
      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
    break;

  default:			/* JCS_UNKNOWN can be anything */
    if (cinfo->num_components < 1)
      ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);
    break;
  }

  /* Set out_color_components and conversion method based on requested space.
   * Also clear the component_needed flags for any unused components,
   * so that earlier pipeline stages can avoid useless computation.
   */

  switch (cinfo->out_color_space) {
  case JCS_GRAYSCALE:
    cinfo->out_color_components = 1;
    if (cinfo->jpeg_color_space == JCS_GRAYSCALE ||
	cinfo->jpeg_color_space == JCS_YCbCr) {
      cconvert->pub.color_convert = grayscale_convert;
      /* For color->grayscale conversion, only the Y (0) component is needed */
      for (ci = 1; ci < cinfo->num_components; ci++)
	cinfo->comp_info[ci].component_needed = FALSE;
    } else
      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
    break;

  case JCS_RGB:
    cinfo->out_color_components = RGB_PIXELSIZE;
    if (cinfo->jpeg_color_space == JCS_YCbCr) {
      cconvert->pub.color_convert = ycc_rgb_convert;
      build_ycc_rgb_table(cinfo);
    } else if (cinfo->jpeg_color_space == JCS_RGB && RGB_PIXELSIZE == 3) {
      cconvert->pub.color_convert = null_convert;
    } else
      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
    break;

  case JCS_CMYK:
    cinfo->out_color_components = 4;
    if (cinfo->jpeg_color_space == JCS_YCCK) {
      cconvert->pub.color_convert = ycck_cmyk_convert;
      build_ycc_rgb_table(cinfo);
    } else if (cinfo->jpeg_color_space == JCS_CMYK) {
      cconvert->pub.color_convert = null_convert;
    } else
      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
    break;

  default:
    /* Permit null conversion to same output space */
    if (cinfo->out_color_space == cinfo->jpeg_color_space) {
      cinfo->out_color_components = cinfo->num_components;
      cconvert->pub.color_convert = null_convert;
    } else			/* unsupported non-null conversion */
      ERREXIT(cinfo, JERR_CONVERSION_NOTIMPL);
    break;
  }

  if (cinfo->quantize_colors)
    cinfo->output_components = 1; /* single colormapped output component */
  else
    cinfo->output_components = cinfo->out_color_components;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕制服丝袜一区二区三区| 久久精品国产亚洲aⅴ| 亚洲国产日韩a在线播放性色| 日本成人超碰在线观看| 欧美在线制服丝袜| 亚洲色图制服诱惑| 91香蕉国产在线观看软件| 久久久久久久电影| 国产黄色精品网站| 国产日产欧美一区二区视频| 精品一区二区免费视频| 日韩美女在线视频 | 日本福利一区二区| 日韩理论电影院| 成人精品国产一区二区4080| 亚洲国产精品激情在线观看| 国产激情一区二区三区四区| 欧美日韩午夜精品| 一区二区三区在线高清| 欧美性猛交xxxx乱大交退制版 | 久久伊99综合婷婷久久伊| 亚洲午夜视频在线| 精品视频色一区| 日韩精品五月天| 91精品国产乱| 国产乱码字幕精品高清av| 国产色一区二区| 91亚洲精华国产精华精华液| 亚洲一区二区三区小说| 91精品国产色综合久久不卡电影 | 日韩免费在线观看| 久久99国产精品麻豆| 久久久精品2019中文字幕之3| 国产精品1024| 亚洲欧美一区二区三区久本道91| 在线精品视频免费播放| 亚洲成人在线观看视频| 精品久久久久久无| 国产成人av一区二区三区在线| 国产精品视频九色porn| 91浏览器打开| 奇米色一区二区三区四区| 久久久久久亚洲综合| 日本精品免费观看高清观看| 奇米精品一区二区三区四区| 中文字幕第一区第二区| 91高清视频在线| 久久精品99久久久| 久久精品亚洲麻豆av一区二区| 成年人午夜久久久| 日韩精品国产欧美| 中文字幕欧美激情| 69久久夜色精品国产69蝌蚪网| 国产精品1区2区3区在线观看| 亚洲视频精选在线| 日韩欧美一二区| 色噜噜偷拍精品综合在线| 麻豆精品一区二区av白丝在线| 国产亚洲一区二区在线观看| 99精品欧美一区| 奇米影视一区二区三区| 亚洲婷婷在线视频| 久久午夜色播影院免费高清| 欧美亚洲尤物久久| 丁香啪啪综合成人亚洲小说 | 在线亚洲人成电影网站色www| 九一久久久久久| 亚洲综合久久久久| 国产精品伦一区| 精品国产露脸精彩对白| 欧美无砖砖区免费| 久久97超碰国产精品超碰| 国产精品久久久久久久久久久免费看| 欧美视频一区二区三区在线观看| 成人av在线播放网址| 国产在线精品一区在线观看麻豆| 亚洲一本大道在线| 亚洲图片欧美激情| 国产日韩精品一区二区三区| 欧美理论片在线| 色香蕉成人二区免费| 成人av在线资源| 国产九色精品成人porny| 日本欧美一区二区| 亚洲国产成人tv| 亚洲精品亚洲人成人网| 久久―日本道色综合久久| 欧美剧情片在线观看| 精品视频一区二区不卡| 日本精品视频一区二区| 色综合视频在线观看| jlzzjlzz欧美大全| 不卡的电影网站| 99精品视频一区二区三区| 成人激情综合网站| 99国产欧美另类久久久精品| 成人午夜在线播放| 成人三级伦理片| 国产成人精品三级| 国产电影一区二区三区| 国产精品18久久久久久久久久久久 | 亚洲电影一区二区| 一区二区国产视频| 亚洲国产欧美日韩另类综合| 亚洲一区在线观看免费 | 美女任你摸久久| 蜜臀a∨国产成人精品| 美女尤物国产一区| 婷婷成人综合网| 一级日本不卡的影视| 亚洲少妇屁股交4| 亚洲尤物在线视频观看| 天天av天天翘天天综合网色鬼国产| 亚洲va国产天堂va久久en| 亚洲成人综合网站| 免费成人性网站| 国产精品香蕉一区二区三区| av福利精品导航| 欧美在线影院一区二区| 日韩午夜中文字幕| 精品第一国产综合精品aⅴ| 日韩欧美一二三区| 国产欧美一区二区在线| 成人免费一区二区三区在线观看| 日韩一区在线免费观看| 亚洲午夜电影在线观看| 奇米色一区二区| 丁香啪啪综合成人亚洲小说| 91麻豆福利精品推荐| 91麻豆精品国产91久久久久久| 欧美成人精品3d动漫h| 国产精品久久久久影院色老大| 国产精品久久久久精k8 | 亚洲一区二区三区在线看| 婷婷成人激情在线网| 国产麻豆精品一区二区| 成人妖精视频yjsp地址| 欧洲亚洲精品在线| 精品国产精品网麻豆系列| 亚洲色图一区二区三区| 日产欧产美韩系列久久99| 国产成人精品影视| 欧美日韩亚州综合| 欧美va亚洲va香蕉在线| 亚洲欧美激情小说另类| 日本亚洲视频在线| 成人18视频在线播放| 91精品国产福利| 亚洲精品v日韩精品| 美脚の诱脚舐め脚责91| 色婷婷综合久色| 久久综合九色综合97婷婷| 亚洲一卡二卡三卡四卡| 国产69精品久久99不卡| 欧美精品一区二区久久婷婷| 夜夜嗨av一区二区三区网页 | 精品亚洲国内自在自线福利| 欧美三级在线看| 亚洲欧美另类在线| av在线播放一区二区三区| 日本一区二区视频在线| 国产在线视频不卡二| 精品国产伦一区二区三区观看体验| 亚洲成av人片在www色猫咪| 色屁屁一区二区| 亚洲欧美国产毛片在线| 色综合网站在线| 亚洲免费伊人电影| 日本精品裸体写真集在线观看| 亚洲精品videosex极品| 在线视频欧美精品| 亚洲第一福利一区| 欧美美女一区二区三区| 日韩国产高清影视| 日韩三级伦理片妻子的秘密按摩| 免费一级片91| 欧美成人video| 国产在线麻豆精品观看| 久久精品免视看| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 精品视频1区2区| 日韩专区欧美专区| 欧美一级视频精品观看| 久久se精品一区精品二区| 精品日韩一区二区| 国产乱码一区二区三区| 国产精品成人一区二区三区夜夜夜 | 看电视剧不卡顿的网站| 精品国产一区二区三区久久影院| 国产在线精品不卡| 国产欧美精品日韩区二区麻豆天美| 不卡视频免费播放| 亚洲综合久久av| 欧美大片在线观看一区| 国产一区二区三区免费在线观看| 欧美国产禁国产网站cc| 91蜜桃婷婷狠狠久久综合9色| 亚洲国产sm捆绑调教视频 | 91蝌蚪porny| 亚洲成a天堂v人片|