⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jcparam.c

📁 Linux下的基于X11的图形开发环境。
💻 C
📖 第 1 页 / 共 2 页
字号:
  /* Use Huffman coding, not arithmetic coding, by default */  cinfo->arith_code = FALSE;  /* By default, don't do extra passes to optimize entropy coding */  cinfo->optimize_coding = FALSE;  /* The standard Huffman tables are only valid for 8-bit data precision.   * If the precision is higher, force optimization on so that usable   * tables will be computed.  This test can be removed if default tables   * are supplied that are valid for the desired precision.   */  if (cinfo->data_precision > 8)    cinfo->optimize_coding = TRUE;  /* By default, use the simpler non-cosited sampling alignment */  cinfo->CCIR601_sampling = FALSE;  /* No input smoothing */  cinfo->smoothing_factor = 0;  /* DCT algorithm preference */  cinfo->dct_method = JDCT_DEFAULT;  /* No restart markers */  cinfo->restart_interval = 0;  cinfo->restart_in_rows = 0;  /* Fill in default JFIF marker parameters.  Note that whether the marker   * will actually be written is determined by jpeg_set_colorspace.   *   * By default, the library emits JFIF version code 1.01.   * An application that wants to emit JFIF 1.02 extension markers should set   * JFIF_minor_version to 2.  We could probably get away with just defaulting   * to 1.02, but there may still be some decoders in use that will complain   * about that; saying 1.01 should minimize compatibility problems.   */  cinfo->JFIF_major_version = 1; /* Default JFIF version = 1.01 */  cinfo->JFIF_minor_version = 1;  cinfo->density_unit = 0;	/* Pixel size is unknown by default */  cinfo->X_density = 1;		/* Pixel aspect ratio is square by default */  cinfo->Y_density = 1;  /* Choose JPEG colorspace based on input space, set defaults accordingly */  jpeg_default_colorspace(cinfo);}/* * Select an appropriate JPEG colorspace for in_color_space. */GLOBAL(void)jpeg_default_colorspace (j_compress_ptr cinfo){  switch (cinfo->in_color_space) {  case JCS_GRAYSCALE:    jpeg_set_colorspace(cinfo, JCS_GRAYSCALE);    break;  case JCS_RGB:    jpeg_set_colorspace(cinfo, JCS_YCbCr);    break;  case JCS_YCbCr:    jpeg_set_colorspace(cinfo, JCS_YCbCr);    break;  case JCS_CMYK:    jpeg_set_colorspace(cinfo, JCS_CMYK); /* By default, no translation */    break;  case JCS_YCCK:    jpeg_set_colorspace(cinfo, JCS_YCCK);    break;  case JCS_UNKNOWN:    jpeg_set_colorspace(cinfo, JCS_UNKNOWN);    break;  default:    ERREXIT(cinfo, JERR_BAD_IN_COLORSPACE);  }}/* * Set the JPEG colorspace, and choose colorspace-dependent default values. */GLOBAL(void)jpeg_set_colorspace (j_compress_ptr cinfo, J_COLOR_SPACE colorspace){  jpeg_component_info * compptr;  int ci;#define SET_COMP(index,id,hsamp,vsamp,quant,dctbl,actbl)  \  (compptr = &cinfo->comp_info[index], \   compptr->component_id = (id), \   compptr->h_samp_factor = (hsamp), \   compptr->v_samp_factor = (vsamp), \   compptr->quant_tbl_no = (quant), \   compptr->dc_tbl_no = (dctbl), \   compptr->ac_tbl_no = (actbl) )  /* Safety check to ensure start_compress not called yet. */  if (cinfo->global_state != CSTATE_START)    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);  /* For all colorspaces, we use Q and Huff tables 0 for luminance components,   * tables 1 for chrominance components.   */  cinfo->jpeg_color_space = colorspace;  cinfo->write_JFIF_header = FALSE; /* No marker for non-JFIF colorspaces */  cinfo->write_Adobe_marker = FALSE; /* write no Adobe marker by default */  switch (colorspace) {  case JCS_GRAYSCALE:    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */    cinfo->num_components = 1;    /* JFIF specifies component ID 1 */    SET_COMP(0, 1, 1,1, 0, 0,0);    break;  case JCS_RGB:    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag RGB */    cinfo->num_components = 3;    SET_COMP(0, 0x52 /* 'R' */, 1,1, 0, 0,0);    SET_COMP(1, 0x47 /* 'G' */, 1,1, 0, 0,0);    SET_COMP(2, 0x42 /* 'B' */, 1,1, 0, 0,0);    break;  case JCS_YCbCr:    cinfo->write_JFIF_header = TRUE; /* Write a JFIF marker */    cinfo->num_components = 3;    /* JFIF specifies component IDs 1,2,3 */    /* We default to 2x2 subsamples of chrominance */    SET_COMP(0, 1, 2,2, 0, 0,0);    SET_COMP(1, 2, 1,1, 1, 1,1);    SET_COMP(2, 3, 1,1, 1, 1,1);    break;  case JCS_CMYK:    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag CMYK */    cinfo->num_components = 4;    SET_COMP(0, 0x43 /* 'C' */, 1,1, 0, 0,0);    SET_COMP(1, 0x4D /* 'M' */, 1,1, 0, 0,0);    SET_COMP(2, 0x59 /* 'Y' */, 1,1, 0, 0,0);    SET_COMP(3, 0x4B /* 'K' */, 1,1, 0, 0,0);    break;  case JCS_YCCK:    cinfo->write_Adobe_marker = TRUE; /* write Adobe marker to flag YCCK */    cinfo->num_components = 4;    SET_COMP(0, 1, 2,2, 0, 0,0);    SET_COMP(1, 2, 1,1, 1, 1,1);    SET_COMP(2, 3, 1,1, 1, 1,1);    SET_COMP(3, 4, 2,2, 0, 0,0);    break;  case JCS_UNKNOWN:    cinfo->num_components = cinfo->input_components;    if (cinfo->num_components < 1 || cinfo->num_components > MAX_COMPONENTS)      ERREXIT2(cinfo, JERR_COMPONENT_COUNT, cinfo->num_components,	       MAX_COMPONENTS);    for (ci = 0; ci < cinfo->num_components; ci++) {      SET_COMP(ci, ci, 1,1, 0, 0,0);    }    break;  default:    ERREXIT(cinfo, JERR_BAD_J_COLORSPACE);  }}#ifdef C_PROGRESSIVE_SUPPORTEDLOCAL(jpeg_scan_info *)fill_a_scan (jpeg_scan_info * scanptr, int ci,	     int Ss, int Se, int Ah, int Al)/* Support routine: generate one scan for specified component */{  scanptr->comps_in_scan = 1;  scanptr->component_index[0] = ci;  scanptr->Ss = Ss;  scanptr->Se = Se;  scanptr->Ah = Ah;  scanptr->Al = Al;  scanptr++;  return scanptr;}LOCAL(jpeg_scan_info *)fill_scans (jpeg_scan_info * scanptr, int ncomps,	    int Ss, int Se, int Ah, int Al)/* Support routine: generate one scan for each component */{  int ci;  for (ci = 0; ci < ncomps; ci++) {    scanptr->comps_in_scan = 1;    scanptr->component_index[0] = ci;    scanptr->Ss = Ss;    scanptr->Se = Se;    scanptr->Ah = Ah;    scanptr->Al = Al;    scanptr++;  }  return scanptr;}LOCAL(jpeg_scan_info *)fill_dc_scans (jpeg_scan_info * scanptr, int ncomps, int Ah, int Al)/* Support routine: generate interleaved DC scan if possible, else N scans */{  int ci;  if (ncomps <= MAX_COMPS_IN_SCAN) {    /* Single interleaved DC scan */    scanptr->comps_in_scan = ncomps;    for (ci = 0; ci < ncomps; ci++)      scanptr->component_index[ci] = ci;    scanptr->Ss = scanptr->Se = 0;    scanptr->Ah = Ah;    scanptr->Al = Al;    scanptr++;  } else {    /* Noninterleaved DC scan for each component */    scanptr = fill_scans(scanptr, ncomps, 0, 0, Ah, Al);  }  return scanptr;}/* * Create a recommended progressive-JPEG script. * cinfo->num_components and cinfo->jpeg_color_space must be correct. */GLOBAL(void)jpeg_simple_progression (j_compress_ptr cinfo){  int ncomps = cinfo->num_components;  int nscans;  jpeg_scan_info * scanptr;  /* Safety check to ensure start_compress not called yet. */  if (cinfo->global_state != CSTATE_START)    ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);  /* Figure space needed for script.  Calculation must match code below! */  if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) {    /* Custom script for YCbCr color images. */    nscans = 10;  } else {    /* All-purpose script for other color spaces. */    if (ncomps > MAX_COMPS_IN_SCAN)      nscans = 6 * ncomps;	/* 2 DC + 4 AC scans per component */    else      nscans = 2 + 4 * ncomps;	/* 2 DC scans; 4 AC scans per component */  }  /* Allocate space for script.   * We need to put it in the permanent pool in case the application performs   * multiple compressions without changing the settings.  To avoid a memory   * leak if jpeg_simple_progression is called repeatedly for the same JPEG   * object, we try to re-use previously allocated space, and we allocate   * enough space to handle YCbCr even if initially asked for grayscale.   */  if (cinfo->script_space == NULL || cinfo->script_space_size < nscans) {    cinfo->script_space_size = MAX(nscans, 10);    cinfo->script_space = (jpeg_scan_info *)      (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,			cinfo->script_space_size * SIZEOF(jpeg_scan_info));  }  scanptr = cinfo->script_space;  cinfo->scan_info = scanptr;  cinfo->num_scans = nscans;  if (ncomps == 3 && cinfo->jpeg_color_space == JCS_YCbCr) {    /* Custom script for YCbCr color images. */    /* Initial DC scan */    scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);    /* Initial AC scan: get some luma data out in a hurry */    scanptr = fill_a_scan(scanptr, 0, 1, 5, 0, 2);    /* Chroma data is too small to be worth expending many scans on */    scanptr = fill_a_scan(scanptr, 2, 1, 63, 0, 1);    scanptr = fill_a_scan(scanptr, 1, 1, 63, 0, 1);    /* Complete spectral selection for luma AC */    scanptr = fill_a_scan(scanptr, 0, 6, 63, 0, 2);    /* Refine next bit of luma AC */    scanptr = fill_a_scan(scanptr, 0, 1, 63, 2, 1);    /* Finish DC successive approximation */    scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);    /* Finish AC successive approximation */    scanptr = fill_a_scan(scanptr, 2, 1, 63, 1, 0);    scanptr = fill_a_scan(scanptr, 1, 1, 63, 1, 0);    /* Luma bottom bit comes last since it's usually largest scan */    scanptr = fill_a_scan(scanptr, 0, 1, 63, 1, 0);  } else {    /* All-purpose script for other color spaces. */    /* Successive approximation first pass */    scanptr = fill_dc_scans(scanptr, ncomps, 0, 1);    scanptr = fill_scans(scanptr, ncomps, 1, 5, 0, 2);    scanptr = fill_scans(scanptr, ncomps, 6, 63, 0, 2);    /* Successive approximation second pass */    scanptr = fill_scans(scanptr, ncomps, 1, 63, 2, 1);    /* Successive approximation final pass */    scanptr = fill_dc_scans(scanptr, ncomps, 1, 0);    scanptr = fill_scans(scanptr, ncomps, 1, 63, 1, 0);  }}#endif /* C_PROGRESSIVE_SUPPORTED */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -