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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? jpegfile.cpp

?? About JPEG, executable on Visual C++
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
{
	if (inBuf==NULL)
		return NULL;


	BYTE *tmp;
	tmp=(BYTE *)new BYTE[height * widthPix * 3];
	if (tmp==NULL)
		return NULL;

	UINT row;

	for (row=0;row<height;row++) {
		memcpy((tmp+row * widthPix * 3), 
				(inBuf + row * widthBytes), 
				widthPix * 3);
	}

	return tmp;
}

//
//
//

BOOL JpegFile::RGBToJpegFile(CString fileName, 
							BYTE *dataBuf,
							UINT widthPix,
							UINT height,
							BOOL color, 
							int quality)
{
	if (dataBuf==NULL)
		return FALSE;
	if (widthPix==0)
		return FALSE;
	if (height==0)
		return FALSE;

	LPBYTE tmp;
	if (!color) {
		tmp = (BYTE*)new BYTE[widthPix*height];
		if (tmp==NULL) {
			AfxMessageBox("Memory error");
			return FALSE;
		}

		UINT row,col;
		for (row=0;row<height;row++) {
			for (col=0;col<widthPix;col++) {
				LPBYTE pRed, pGrn, pBlu;
				pRed = dataBuf + row * widthPix * 3 + col * 3;
				pGrn = dataBuf + row * widthPix * 3 + col * 3 + 1;
				pBlu = dataBuf + row * widthPix * 3 + col * 3 + 2;

				// luminance
				int lum = (int)(.299 * (double)(*pRed) + .587 * (double)(*pGrn) + .114 * (double)(*pBlu));
				LPBYTE pGray;
				pGray = tmp + row * widthPix + col;
				*pGray = (BYTE)lum;
			}
		}
	}

	struct jpeg_compress_struct cinfo;
	/* More stuff */
	FILE * outfile=NULL;			/* target file */
	int row_stride;			/* physical row widthPix in image buffer */

	struct my_error_mgr jerr;

	/* Step 1: allocate and initialize JPEG compression object */
	cinfo.err = jpeg_std_error(&jerr.pub);
	jerr.pub.error_exit = my_error_exit;

	/* Establish the setjmp return context for my_error_exit to use. */
	if (setjmp(jerr.setjmp_buffer)) {
		/* If we get here, the JPEG code has signaled an error.
		 * We need to clean up the JPEG object, close the input file, and return.
		 */

		jpeg_destroy_compress(&cinfo);

		if (outfile!=NULL)
			fclose(outfile);

		if (!color) {
			delete [] tmp;
		}
		return FALSE;
	}

	/* Now we can initialize the JPEG compression object. */
	jpeg_create_compress(&cinfo);

	/* Step 2: specify data destination (eg, a file) */
	/* Note: steps 2 and 3 can be done in either order. */

	if ((outfile = fopen(fileName, "wb")) == NULL) {
		char buf[250];
		sprintf(buf, "JpegFile :\nCan't open %s\n", fileName);
		AfxMessageBox(buf);
		return FALSE;
	}

	jpeg_stdio_dest(&cinfo, outfile);

	/* Step 3: set parameters for compression */
												    
	/* First we supply a description of the input image.
	* Four fields of the cinfo struct must be filled in:
	*/
	cinfo.image_width = widthPix; 	/* image widthPix and height, in pixels */
	cinfo.image_height = height;
	if (color) {
		cinfo.input_components = 3;		/* # of color components per pixel */
		cinfo.in_color_space = JCS_RGB; 	/* colorspace of input image */
	} else {
		cinfo.input_components = 1;		/* # of color components per pixel */
		cinfo.in_color_space = JCS_GRAYSCALE; 	/* colorspace of input image */
	}

 
/* Now use the library's routine to set default compression parameters.
   * (You must set at least cinfo.in_color_space before calling this,
   * since the defaults depend on the source color space.)
   */

  jpeg_set_defaults(&cinfo);
  /* Now you can set any non-default parameters you wish to.
   * Here we just illustrate the use of quality (quantization table) scaling:
   */
  jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */);

  /* Step 4: Start compressor */

  /* TRUE ensures that we will write a complete interchange-JPEG file.
   * Pass TRUE unless you are very sure of what you're doing.
   */
  jpeg_start_compress(&cinfo, TRUE);

  /* Step 5: while (scan lines remain to be written) */
  /*           jpeg_write_scanlines(...); */

  /* Here we use the library's state variable cinfo.next_scanline as the
   * loop counter, so that we don't have to keep track ourselves.
   * To keep things simple, we pass one scanline per call; you can pass
   * more if you wish, though.
   */
  row_stride = widthPix * 3;	/* JSAMPLEs per row in image_buffer */

  while (cinfo.next_scanline < cinfo.image_height) {
    /* jpeg_write_scanlines expects an array of pointers to scanlines.
     * Here the array is only one element long, but you could pass
     * more than one scanline at a time if that's more convenient.
     */
	LPBYTE outRow;
	if (color) {
		outRow = dataBuf + (cinfo.next_scanline * widthPix * 3);
	} else {
		outRow = tmp + (cinfo.next_scanline * widthPix);
	}

    (void) jpeg_write_scanlines(&cinfo, &outRow, 1);
  }

  /* Step 6: Finish compression */

  jpeg_finish_compress(&cinfo);

  /* After finish_compress, we can close the output file. */
  fclose(outfile);

  /* Step 7: release JPEG compression object */

  /* This is an important step since it will release a good deal of memory. */
  jpeg_destroy_compress(&cinfo);

  if (!color)
	  delete [] tmp;
  /* And we're done! */

  return TRUE;
}

//
//	stash a scanline
//

void j_putRGBScanline(BYTE *jpegline, 
					 int widthPix,
					 BYTE *outBuf,
					 int row)
{
	int offset = row * widthPix * 3;
	int count;
	for (count=0;count<widthPix;count++) 
	{
		*(outBuf + offset + count * 3 + 0) = *(jpegline + count * 3 + 0);
		*(outBuf + offset + count * 3 + 1) = *(jpegline + count * 3 + 1);
		*(outBuf + offset + count * 3 + 2) = *(jpegline + count * 3 + 2);
	}
}

//
//	stash a gray scanline
//

void j_putGrayScanlineToRGB(BYTE *jpegline, 
							 int widthPix,
							 BYTE *outBuf,
							 int row)
{
	int offset = row * widthPix * 3;
	int count;
	for (count=0;count<widthPix;count++) {

		BYTE iGray;

		// get our grayscale value
		iGray = *(jpegline + count);

		*(outBuf + offset + count * 3 + 0) = iGray;
		*(outBuf + offset + count * 3 + 1) = iGray;
		*(outBuf + offset + count * 3 + 2) = iGray;
	}
}

//
// copies BYTE buffer into DWORD-aligned BYTE buffer
// return addr of new buffer
//

BYTE * JpegFile::MakeDwordAlignedBuf(BYTE *dataBuf,
									 UINT widthPix,				// pixels!!
									 UINT height,
									 UINT *uiOutWidthBytes)		// bytes!!!
{
	////////////////////////////////////////////////////////////
	// what's going on here? this certainly means trouble 
	if (dataBuf==NULL)
		return NULL;

	////////////////////////////////////////////////////////////
	// how big is the smallest DWORD-aligned buffer that we can use?
	UINT uiWidthBytes;
	uiWidthBytes = WIDTHBYTES(widthPix * 24);

	DWORD dwNewsize=(DWORD)((DWORD)uiWidthBytes * 
							(DWORD)height);
	BYTE *pNew;

	////////////////////////////////////////////////////////////
	// alloc and open our new buffer
	pNew=(BYTE *)new BYTE[dwNewsize];
	if (pNew==NULL) {
		return NULL;
	}
	
	////////////////////////////////////////////////////////////
	// copy row-by-row
	UINT uiInWidthBytes = widthPix * 3;
	UINT uiCount;
	for (uiCount=0;uiCount < height;uiCount++) {
		BYTE * bpInAdd;
		BYTE * bpOutAdd;
		ULONG lInOff;
		ULONG lOutOff;

		lInOff=uiInWidthBytes * uiCount;
		lOutOff=uiWidthBytes * uiCount;

		bpInAdd= dataBuf + lInOff;
		bpOutAdd= pNew + lOutOff;

		memcpy(bpOutAdd,bpInAdd,uiInWidthBytes);
	}

	*uiOutWidthBytes=uiWidthBytes;
	return pNew;
}

//
//	vertically flip a buffer 
//	note, this operates on a buffer of widthBytes bytes, not pixels!!!
//

BOOL JpegFile::VertFlipBuf(BYTE  * inbuf, 
					   UINT widthBytes, 
					   UINT height)
{   
	BYTE  *tb1;
	BYTE  *tb2;

	if (inbuf==NULL)
		return FALSE;

	UINT bufsize;

	bufsize=widthBytes;

	tb1= (BYTE *)new BYTE[bufsize];
	if (tb1==NULL) {
		return FALSE;
	}

	tb2= (BYTE *)new BYTE [bufsize];
	if (tb2==NULL) {
		delete [] tb1;
		return FALSE;
	}
	
	UINT row_cnt;     
	ULONG off1=0;
	ULONG off2=0;

	for (row_cnt=0;row_cnt<(height+1)/2;row_cnt++) {
		off1=row_cnt*bufsize;
		off2=((height-1)-row_cnt)*bufsize;   
		
		memcpy(tb1,inbuf+off1,bufsize);
		memcpy(tb2,inbuf+off2,bufsize);	
		memcpy(inbuf+off1,tb2,bufsize);
		memcpy(inbuf+off2,tb1,bufsize);
	}	

	delete [] tb1;
	delete [] tb2;

	return TRUE;
}        


//
//	swap Rs and Bs
//
//	Note! this does its stuff on buffers with a whole number of pixels
//	per data row!!
//


BOOL JpegFile::BGRFromRGB(BYTE *buf, UINT widthPix, UINT height)
{
	if (buf==NULL)
		return FALSE;

	UINT col, row;
	for (row=0;row<height;row++) {
		for (col=0;col<widthPix;col++) {
			LPBYTE pRed, pGrn, pBlu;
			pRed = buf + row * widthPix * 3 + col * 3;
			pGrn = buf + row * widthPix * 3 + col * 3 + 1;
			pBlu = buf + row * widthPix * 3 + col * 3 + 2;

			// swap red and blue
			BYTE tmp;
			tmp = *pRed;
			*pRed = *pBlu;
			*pBlu = tmp;
		}
	}
	return TRUE;
}

//
//	Note! this does its stuff on buffers with a whole number of pixels
//	per data row!!
//

BOOL JpegFile::MakeGrayScale(BYTE *buf, UINT widthPix, UINT height)
{
	if (buf==NULL)
		return FALSE;

	UINT row,col;
	for (row=0;row<height;row++) {
		for (col=0;col<widthPix;col++) {
			LPBYTE pRed, pGrn, pBlu;
			pRed = buf + row * widthPix * 3 + col * 3;
			pGrn = buf + row * widthPix * 3 + col * 3 + 1;
			pBlu = buf + row * widthPix * 3 + col * 3 + 2;

			// luminance
			int lum = (int)(.299 * (double)(*pRed) + .587 * (double)(*pGrn) + .114 * (double)(*pBlu));

			*pRed = (BYTE)lum;
			*pGrn = (BYTE)lum;
			*pBlu = (BYTE)lum;
		}
	}
	return TRUE;
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产资源精品在线观看| 韩国精品久久久| 亚洲一区在线观看免费| 日韩中文欧美在线| 五月天久久比比资源色| 国产精品亚洲综合一区在线观看| 国产一区二区主播在线| 国内精品免费**视频| 99久久综合狠狠综合久久| av一区二区三区四区| 96av麻豆蜜桃一区二区| 欧美私人免费视频| 欧美精品一区二| 午夜电影网一区| 男人的j进女人的j一区| 国产伦精品一区二区三区视频青涩| 成人一区二区三区| 欧美一级片免费看| 一区二区视频免费在线观看| 韩国精品主播一区二区在线观看 | 国产精品国产自产拍高清av | 26uuu亚洲综合色| 一区二区高清在线| 成人一级片在线观看| 亚洲日本丝袜连裤袜办公室| 欧美日韩国产小视频| 日韩一区二区视频在线观看| 国产精品免费视频一区| 精品一区二区三区影院在线午夜| 一本大道av一区二区在线播放| 久久久久国产精品麻豆ai换脸| 日韩精品三区四区| 精品视频123区在线观看| 成人欧美一区二区三区小说| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 成人黄页在线观看| 久久嫩草精品久久久精品一| 久久97超碰色| 欧美激情一二三区| 99精品国产91久久久久久 | 国产一区二区三区国产| 91麻豆精品国产91久久久久久| 亚洲一区二区三区四区的| 色综合av在线| 日本伊人午夜精品| 精品久久人人做人人爰| 国产精品1024| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 狠狠色狠狠色综合| 精品久久久久99| 91视频免费看| 亚洲va韩国va欧美va| www久久久久| 91香蕉国产在线观看软件| 一区二区三区成人| 欧美一区二区成人| 91麻豆蜜桃一区二区三区| 日韩精品一级二级| 欧美国产1区2区| 欧美一区二区三区小说| 成人免费av资源| 久久激情综合网| 亚洲国产综合91精品麻豆| 久久亚洲综合av| 欧美久久一区二区| 色婷婷激情综合| 懂色av中文一区二区三区| 日本一区中文字幕| 亚洲精品国产无天堂网2021| 久久男人中文字幕资源站| 欧美人与性动xxxx| 欧美性猛片aaaaaaa做受| 波多野结衣在线一区| 国产精品综合网| 狠狠久久亚洲欧美| 极品美女销魂一区二区三区免费| 亚洲一区二区三区免费视频| 亚洲精品菠萝久久久久久久| 国产精品久久午夜| 国产婷婷精品av在线| 精品国产sm最大网站免费看| 制服丝袜日韩国产| 91精品在线观看入口| 9191成人精品久久| 91精品国产一区二区三区蜜臀| 欧美日韩成人综合| 欧美麻豆精品久久久久久| 91精品国模一区二区三区| 这里只有精品免费| 精品免费日韩av| 欧美sm美女调教| 国产精品99久久久久久似苏梦涵| 国产女主播视频一区二区| 国产精品网友自拍| 一二三区精品视频| 日本不卡免费在线视频| 国产一区二区三区四区在线观看| 久久精品国产亚洲高清剧情介绍 | 欧美精品一区二区三区蜜臀| 国产人成一区二区三区影院| 国产午夜亚洲精品不卡| 亚洲一线二线三线视频| 久久91精品久久久久久秒播 | 中文字幕一区二区三中文字幕| 亚洲色图19p| 美女高潮久久久| 色婷婷综合五月| 国产日韩一级二级三级| 视频在线观看一区二区三区| 国产精品一级片| 欧美福利一区二区| 亚洲欧美日韩综合aⅴ视频| 国产在线精品一区二区不卡了| 色网站国产精品| 中文字幕一区二区5566日韩| 久久精品国产一区二区三 | 麻豆精品一二三| 成人h动漫精品| 欧美成人一区二区三区片免费 | 一本大道久久a久久综合婷婷| 久久天堂av综合合色蜜桃网| 三级成人在线视频| 欧美日韩视频不卡| 亚洲国产精品久久一线不卡| 91农村精品一区二区在线| 国产精品伦一区| av电影在线观看不卡| 亚洲天堂免费看| 91日韩精品一区| 亚洲精品高清在线| 色吧成人激情小说| 亚洲国产精品影院| 91精品国产高清一区二区三区| 亚洲成人免费观看| 91精选在线观看| 国产成人av一区二区| 亚洲视频一区在线| 欧美日韩电影在线| 精品在线一区二区| 亚洲青青青在线视频| 欧洲精品一区二区三区在线观看| 亚洲sss视频在线视频| 日韩精品一区二区三区在线观看| 国内精品国产三级国产a久久 | 在线观看www91| 蜜臀av性久久久久蜜臀aⅴ| 欧美高清在线一区二区| 欧美日韩精品福利| 成人免费va视频| 日韩激情视频在线观看| 国产精品久久久久一区| 在线电影一区二区三区| 国产jizzjizz一区二区| 亚洲成a人片在线不卡一二三区 | 国产成人精品免费视频网站| 亚洲综合另类小说| 亚洲男人的天堂在线观看| 精品国产3级a| 91精品国产免费| 91精品中文字幕一区二区三区| 成人av网站免费| 国产一区二区不卡| 免费黄网站欧美| 蜜桃av噜噜一区| 日韩黄色片在线观看| 五月婷婷综合网| 色综合视频一区二区三区高清| 亚洲免费毛片网站| 欧美精品一区视频| 欧美成人video| 26uuu另类欧美亚洲曰本| 欧美一区二区三区日韩| 日韩视频一区在线观看| 91精品国产免费| xvideos.蜜桃一区二区| 日韩美女视频一区二区在线观看| 3d动漫精品啪啪一区二区竹菊| 欧美福利电影网| 欧美电影免费观看高清完整版在线| 欧美一卡二卡三卡| 精品999在线播放| 中文在线资源观看网站视频免费不卡| 国产亚洲一区二区三区| 中文字幕在线观看一区| 一区2区3区在线看| 日韩国产在线观看| 丁香婷婷综合网| 欧美色大人视频| 久久久影院官网| 亚洲男人的天堂网| 美女视频第一区二区三区免费观看网站 | 国产精品乱码人人做人人爱| 亚洲精品日日夜夜| 久久精品99久久久| 日本韩国精品在线| 久久久综合视频| 日韩精品91亚洲二区在线观看| 国产成人精品免费在线| 日韩一区二区中文字幕| 亚洲天堂免费在线观看视频|