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

📄 comp.txt

📁 这是一个yuv422压缩成jpeg的应用例子
💻 TXT
字号:
/*
处理一个YUV422平面格式压缩jpeg
*/
write_JPEG_file (char * filename, int quality,int image_width,int image_height)
{

  struct jpeg_compress_struct cinfo;

  struct jpeg_error_mgr jerr;

  FILE * outfile;		/* target file */
  JSAMPROW row_pointer[1];	/* pointer to JSAMPLE row[s] */
  int row_stride;		/* physical row width in image buffer */
	JSAMPIMAGE	buffer;

   int band;
  cinfo.err = jpeg_std_error(&jerr);

  jpeg_create_compress(&cinfo);


  if ((outfile = fopen(filename, "wb")) == NULL) {
    fprintf(stderr, "can't open %s\n", filename);
    exit(1);
  }
  jpeg_stdio_dest(&cinfo, outfile);


  cinfo.image_width = image_width; 	/* image width and height, in pixels */
  cinfo.image_height = image_height;
  cinfo.input_components = 3;		/* # of color components per pixel */
  cinfo.in_color_space = JCS_RGB; 	/* colorspace of input image */

  jpeg_set_defaults(&cinfo);

  jpeg_set_quality(&cinfo, quality, TRUE );

//////////////////////////////
  		cinfo.raw_data_in = TRUE;
		cinfo.jpeg_color_space = JCS_YCbCr;
		cinfo.comp_info[0].h_samp_factor = 2;
		cinfo.comp_info[0].v_samp_factor = 1;
/////////////////////////

  jpeg_start_compress(&cinfo, TRUE);

	buffer = (JSAMPIMAGE) (*cinfo.mem->alloc_small) ((j_common_ptr) &cinfo, 
		JPOOL_IMAGE, 3 * SIZEOF(JSAMPARRAY));	
	for(band=0; band<3; band++)
	{buf_width[band] = cinfo.comp_info[band].width_in_blocks * DCTSIZE;
	buf_height[band] = cinfo.comp_info[band].v_samp_factor * DCTSIZE
	buffer[band] = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo,
		JPOOL_IMAGE, buf_width[band], buf_height[band]);
	}	
		
	max_line = cinfo.max_v_samp_factor*DCTSIZE;	
	for(counter=0; cinfo.next_scanline < cinfo.image_height; counter++)
	{		
		//buffer image copy.
		for(band=0; band<3; band++)
		{mem_size = buf_width[band];
		pDst = (uint8 *) buffer[band][0];
		pSrc = (uint8 *) yuv.data[band] + //yuv.data[band]分别表示YUV起始地址
			counter*buf_height[band] * buf_width[band];
		
		for(i=0; i<buf_height[band]; i++)
		{memcpy(pDst, pSrc, mem_size);
		pSrc += buf_width[band];
		pDst += buf_width[band];
		}
		}
		jpeg_write_raw_data(&cinfo, buffer, max_line);
	}


  jpeg_finish_compress(&cinfo);
 
  fclose(outfile);

  jpeg_destroy_compress(&cinfo);


}

⌨️ 快捷键说明

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