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

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

?? ip.cpp

?? jpeg壓縮標(biāo)準(zhǔn)中Jpg和Bmp格式相互轉(zhuǎn)換的API封裝
?? CPP
?? 第 1 頁 / 共 4 頁
字號:

	// source dib buffer
    LPBITMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDib);
	if (! lpSrcDIB)
	{
		WaitCursorBegin();
		return FALSE;
	}
    // New DIB buffer
    LPBITMAPINFO lpbmi = (LPBITMAPINFO)GlobalLock(hNewDIB);
	if (! lpbmi)
	{
		WaitCursorBegin();
		return FALSE;
	}

	// start erosion...
	LPBYTE lpPtr;
	LPBYTE lpTempPtr;
	LONG  x,y;
	BYTE  num, num0;
	int   i;
	LONG lHeight = DIBHeight(lpSrcDIB);
	LONG lWidth = DIBWidth(lpSrcDIB);
	DWORD dwBufferSize = GlobalSize(lpSrcDIB);
	int nLineBytes = BytesPerLine(lpSrcDIB);

	// Step 1: erosion
	if(bHori)
	{
		for (y=0; y<lHeight; y++)
		{
			lpPtr=(BYTE *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes)+1;
			lpTempPtr=(BYTE *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes)+1;
			for (x=1; x<lWidth-1; x++)
			{
				num0 = num = 0 ;
				for(i=0;i<3;i++)
				{
					num=(unsigned char)*(lpPtr+i-1);
					if(num > num0)
						num0 = num;
				}
				*lpTempPtr=(unsigned char)num0;
				/*
				num=(unsigned char)*lpPtr;
				if (num==0)
				{
					*lpTempPtr=(unsigned char)0;
					for(i=0;i<3;i++)
					{
						num=(unsigned char)*(lpPtr+i-1);
						if(num==255)
						{
							*lpTempPtr=(unsigned char)255;
							break;
						}
					}
				}
				else 
					*lpTempPtr=(unsigned char)255;
				*/
				lpPtr++;
				lpTempPtr++;
			}
		}
	}
	else		// Vertical
	{
		for (y=1; y<lHeight-1; y++)
		{
			lpPtr=(BYTE *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes);
			lpTempPtr=(BYTE *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes);
			for (x=0; x<lWidth; x++)
			{
				num0 = num = 0 ;
				for(i=0;i<3;i++)
				{
					num=(unsigned char)*(lpPtr+i-1);
					if(num > num0)
						num0 = num;
				}
				*lpTempPtr=(unsigned char)num0;
				/*
				num=(unsigned char)*lpPtr;
				if (num==0)
				{
					*lpTempPtr=(unsigned char)0;
					for(i=0;i<3;i++)
					{
						num=(unsigned char)*(lpPtr+(i-1)*nLineBytes);
						if(num==255)
						{
							*lpTempPtr=(unsigned char)255;
							break;
						}
					}
				}
				else 
					*lpTempPtr=(unsigned char)255;
				*/
				lpPtr++;
				lpTempPtr++;
			}
		}
	}
	
	// Step 2: original image minues dilation image
	if(bHori)
	{
		for(y=0;y<lHeight;y++)
		{
			lpPtr=(BYTE *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes)+1;
			lpTempPtr=(BYTE *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes)+1;
			for(x=1;x<lWidth-1;x++)
			{
				if (*lpTempPtr == *lpPtr)
					*lpTempPtr = (BYTE)255;
				else
					*lpTempPtr = *lpTempPtr - *lpPtr;

				lpPtr++;
				lpTempPtr++;
			}
		}
	}
	else
	{
		for(y=1;y<lHeight-1;y++)
		{
			lpPtr=(BYTE *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes);
			lpTempPtr=(BYTE *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes);
			for(x=0;x<lWidth;x++)
			{
				if (*lpTempPtr == *lpPtr)
					*lpTempPtr = (BYTE)255;
				else
					*lpTempPtr = *lpTempPtr - *lpPtr;

				lpPtr++;
				lpTempPtr++;
			}
		}
	}

	// cleanup
	GlobalUnlock(hDib);
	GlobalUnlock(hNewDIB);
	GlobalFree(hNewDIB);

	return TRUE;
}

/************************************************************************* 
 * 
 * ThinningDIB() 
 * 
 * Parameters: 
 * 
 * HDIB hDib        - objective DIB handle
 * 
 * Return Value: 
 * 
 * BOOL             - True is success, else False
 * 
 * Description: 
 * 
 * This function thins a DIB
 * 
 ************************************************************************/ 
BOOL ThinningDIB(HDIB hDib)
{
	static int erasetable[256]=
	{
		0,0,1,1,0,0,1,1,
		1,1,0,1,1,1,0,1,
		1,1,0,0,1,1,1,1,
		0,0,0,0,0,0,0,1,

		0,0,1,1,0,0,1,1,
		1,1,0,1,1,1,0,1,
		1,1,0,0,1,1,1,1,
		0,0,0,0,0,0,0,1,

		1,1,0,0,1,1,0,0,
		0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,0,

		1,1,0,0,1,1,0,0,
		1,1,0,1,1,1,0,1,
		0,0,0,0,0,0,0,0,
		0,0,0,0,0,0,0,0,

		0,0,1,1,0,0,1,1,
		1,1,0,1,1,1,0,1,
		1,1,0,0,1,1,1,1,
		0,0,0,0,0,0,0,1,

		0,0,1,1,0,0,1,1,
		1,1,0,1,1,1,0,1,
		1,1,0,0,1,1,1,1,
		0,0,0,0,0,0,0,0,

		1,1,0,0,1,1,0,0,
		0,0,0,0,0,0,0,0,
		1,1,0,0,1,1,1,1,
		0,0,0,0,0,0,0,0,

		1,1,0,0,1,1,0,0,
		1,1,0,1,1,1,0,0,
		1,1,0,0,1,1,1,0,
		1,1,0,0,1,0,0,0
	};

	// start wait cursor
	WaitCursorBegin();

    // Old DIB buffer
	if (hDib == NULL)
	{
		WaitCursorEnd();
        return FALSE;
	}

	// only support 256 color image
	WORD wBitCount = DIBBitCount(hDib);
	if (wBitCount != 8)
	{
		WaitCursorEnd();
        return FALSE;
	}

	// new DIB
	HDIB hNewDIB = CopyHandle(hDib);
	if (! hNewDIB)
	{
		WaitCursorEnd();
        return FALSE;
	}

	// source dib buffer
    LPBITMAPINFO lpSrcDIB = (LPBITMAPINFO)GlobalLock(hDib);
	if (! lpSrcDIB)
	{
		WaitCursorBegin();
		return FALSE;
	}
    // New DIB buffer
    LPBITMAPINFO lpbmi = (LPBITMAPINFO)GlobalLock(hNewDIB);
	if (! lpbmi)
	{
		WaitCursorBegin();
		return FALSE;
	}

	// start erosion...
	LPSTR lpPtr;
	LPSTR lpTempPtr;
	LONG  x,y;
	BYTE  num;
	LONG lHeight = DIBHeight(lpSrcDIB);
	LONG lWidth = DIBWidth(lpSrcDIB);
	DWORD dwBufferSize = GlobalSize(lpSrcDIB);
	int nLineBytes = BytesPerLine(lpSrcDIB);
	int nw,n,ne,w,e,sw,s,se;

	BOOL Finished=FALSE;
    while(!Finished)
	{
    	Finished=TRUE;
		for (y=1;y<lHeight-1;y++)
		{ 
			lpPtr=(char *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes);
			lpTempPtr=(char *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes);
			x=1; 
			while(x<lWidth-1)
			{
				if(*(lpPtr+x)==0)
				{
					w=(unsigned char)*(lpPtr+x-1);
					e=(unsigned char)*(lpPtr+x+1);
					if( (w==255)|| (e==255))
					{
						nw=(unsigned char)*(lpPtr+x+nLineBytes-1);
						n=(unsigned char)*(lpPtr+x+nLineBytes);
						ne=(unsigned char)*(lpPtr+x+nLineBytes+1);
						sw=(unsigned char)*(lpPtr+x-nLineBytes-1);
						s=(unsigned char)*(lpPtr+x-nLineBytes);
						se=(unsigned char)*(lpPtr+x-nLineBytes+1);
						num=nw/255+n/255*2+ne/255*4+w/255*8+e/255*16+sw/255*32+s/255*64+se/255*128;
						if(erasetable[num]==1)
						{
							*(lpPtr+x)=(BYTE)255;
							*(lpTempPtr+x)=(BYTE)255;
							Finished=FALSE;
							x++;
						}
					}
				}
				x++;
			}
		}
	
		for (x=1;x<lWidth-1;x++)
		{ 
			y=1;
			while(y<lHeight-1)
			{
				lpPtr=(char *)lpbmi+(dwBufferSize-nLineBytes-y*nLineBytes);
				lpTempPtr=(char *)lpSrcDIB+(dwBufferSize-nLineBytes-y*nLineBytes);
				if(*(lpPtr+x)==0)
				{
					n=(unsigned char)*(lpPtr+x+nLineBytes);
					s=(unsigned char)*(lpPtr+x-nLineBytes);
					if( (n==255)|| (s==255))
					{
						nw=(unsigned char)*(lpPtr+x+nLineBytes-1);
						ne=(unsigned char)*(lpPtr+x+nLineBytes+1);
						w=(unsigned char)*(lpPtr+x-1);
						e=(unsigned char)*(lpPtr+x+1);
						sw=(unsigned char)*(lpPtr+x-nLineBytes-1);
						se=(unsigned char)*(lpPtr+x-nLineBytes+1);
						num=nw/255+n/255*2+ne/255*4+w/255*8+e/255*16+sw/255*32+s/255*64+se/255*128;
						if(erasetable[num]==1)
						{
							*(lpPtr+x)=(BYTE)255;
							*(lpTempPtr+x)=(BYTE)255;
							Finished=FALSE;
							y++;
						}
					}
				}
				y++;
			}
		} 
	}

	// cleanup
	GlobalUnlock(hDib);
	GlobalUnlock(hNewDIB);
	GlobalFree(hNewDIB);

	return TRUE;
}

//////////////////////////////////////////////////////////
// internal definitions

#define PI (double)3.14159265359

/*complex number*/
typedef struct
{
	double re;
	double im;
}COMPLEX;

/*complex add*/
COMPLEX Add(COMPLEX c1, COMPLEX c2)
{
	COMPLEX c;
	c.re=c1.re+c2.re;
	c.im=c1.im+c2.im;
	return c;
}

/*complex substract*/
COMPLEX Sub(COMPLEX c1, COMPLEX c2)
{
	COMPLEX c;
	c.re=c1.re-c2.re;
	c.im=c1.im-c2.im;
	return c;
}

/*complex multiple*/
COMPLEX Mul(COMPLEX c1, COMPLEX c2)
{
	COMPLEX c;
	c.re=c1.re*c2.re-c1.im*c2.im;
	c.im=c1.re*c2.im+c2.re*c1.im;
	return c;
}
//////////////////////////////////////////////////////////

/*
void FFT(COMPLEX * TD, COMPLEX * FD, int power);
void IFFT(COMPLEX * FD, COMPLEX * TD, int power);
void DCT(double *f, double *F, int power);
void IDCT(double *F, double *f, int power);
void WALh(double *f, double *W, int power);
void IWALh(double *W, double *f, int power);
*/

/****************************************************
	FFT()

	參數(shù):

		TD為時域值
		FD為頻域值
		power為2的冪數(shù)

	返回值:


	說明:

		本函數(shù)實現(xiàn)快速傅立葉變換
****************************************************/
void FFT(COMPLEX * TD, COMPLEX * FD, int power)
{
	int count;
	int i,j,k,bfsize,p;
	double angle;
	COMPLEX *W,*X1,*X2,*X;

	/*計算傅立葉變換點數(shù)*/
	count=1<<power;
	
	/*分配運算所需存儲器*/
	W=(COMPLEX *)malloc(sizeof(COMPLEX)*count/2);
	X1=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
	X2=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
	
	/*計算加權(quán)系數(shù)*/
	for(i=0;i<count/2;i++)
	{
		angle=-i*PI*2/count;
		W[i].re=cos(angle);
		W[i].im=sin(angle);
	}
	
	/*將時域點寫入存儲器*/
	memcpy(X1,TD,sizeof(COMPLEX)*count);
	
	/*蝶形運算*/
	for(k=0;k<power;k++)
	{
		for(j=0;j<1<<k;j++)
		{
			bfsize=1<<(power-k);
			for(i=0;i<bfsize/2;i++)
			{
				p=j*bfsize;
				X2[i+p]=Add(X1[i+p],X1[i+p+bfsize/2]);
				X2[i+p+bfsize/2]=Mul(Sub(X1[i+p],X1[i+p+bfsize/2]),W[i*(1<<k)]);
			}
		}
		X=X1;
		X1=X2;
		X2=X;
	}
	
	/*重新排序*/
	for(j=0;j<count;j++)
	{
		p=0;
		for(i=0;i<power;i++)
		{
			if (j&(1<<i)) p+=1<<(power-i-1);
		}
		FD[j]=X1[p];
	}
	
	/*釋放存儲器*/
	free(W);
	free(X1);
	free(X2);
}

/****************************************************
	IFFT()

	參數(shù):

		FD為頻域值
		TD為時域值
		power為2的冪數(shù)

	返回值:


	說明:

		本函數(shù)利用快速傅立葉變換實現(xiàn)傅立葉反變換
****************************************************/
void IFFT(COMPLEX * FD, COMPLEX * TD, int power)
{
	int i, count;
	COMPLEX *x;

	/*計算傅立葉反變換點數(shù)*/
	count=1<<power;

	/*分配運算所需存儲器*/
	x=(COMPLEX *)malloc(sizeof(COMPLEX)*count);

	/*將頻域點寫入存儲器*/
	memcpy(x,FD,sizeof(COMPLEX)*count);
	
	/*求頻域點的共軛*/
	for(i=0;i<count;i++)
		x[i].im = -x[i].im;

	/*調(diào)用FFT*/
	FFT(x, TD, power);

	/*求時域點的共軛*/
	for(i=0;i<count;i++)
	{
		TD[i].re /= count;
		TD[i].im = -TD[i].im / count;
	}

	/*釋放存儲器*/
	free(x);
}

/*******************************************************
	DCT()

	參數(shù):

		f為時域值
		F為頻域值
		power為2的冪數(shù)

	返回值:


	說明:

		本函數(shù)利用快速傅立葉變換實現(xiàn)快速離散余弦變換
********************************************************/
void DCT(double *f, double *F, int power)
{
	int i,count;
	COMPLEX *X;
	double s;

	/*計算離散余弦變換點數(shù)*/
	count=1<<power;
	
	/*分配運算所需存儲器*/
	X=(COMPLEX *)malloc(sizeof(COMPLEX)*count*2);
	
	/*延拓*/
	memset(X,0,sizeof(COMPLEX)*count*2);
	
	/*將時域點寫入存儲器*/
	for(i=0;i<count;i++)
	{
		X[i].re=f[i];
	}
	
	/*調(diào)用快速傅立葉變換*/
	FFT(X,X,power+1);
	
	/*調(diào)整系數(shù)*/
	s=1/sqrt(count);
	F[0]=X[0].re*s;
	s*=sqrt(2);
	for(i=1;i<count;i++)
	{
		F[i]=(X[i].re*cos(i*PI/(count*2))+X[i].im*sin(i*PI/(count*2)))*s;
	}
	
	/*釋放存儲器*/
	free(X);
}

/************************************************************
	IDCT()

	參數(shù):

		F為頻域值
		f為時域值
		power為2的冪數(shù)

	返回值:


	說明:

		本函數(shù)利用快速傅立葉反變換實現(xiàn)快速離散反余弦變換
*************************************************************/
void IDCT(double *F, double *f, int power)
{
	int i,count;
	COMPLEX *X;
	double s;

	/*計算離散反余弦變換點數(shù)*/
	count=1<<power;
	
	/*分配運算所需存儲器*/
	X=(COMPLEX *)malloc(sizeof(COMPLEX)*count*2);
	
	/*延拓*/
	memset(X,0,sizeof(COMPLEX)*count*2);
	

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情五月婷婷综合网| 美国十次综合导航| 国产精品色婷婷久久58| 精品国产露脸精彩对白| 日韩精品一区二区三区在线播放| 欧美日韩国产乱码电影| 欧美另类videos死尸| 欧美日韩国产天堂| 91精品国产综合久久久蜜臀粉嫩| 欧美日高清视频| 欧美成人a∨高清免费观看| 精品嫩草影院久久| 中文字幕二三区不卡| 亚洲精品第1页| 视频一区二区中文字幕| 狠狠色丁香久久婷婷综合丁香| 国模少妇一区二区三区| av在线免费不卡| 欧美日韩精品三区| 久久综合狠狠综合| 一区二区三区四区在线播放| 亚洲福利电影网| 国产麻豆视频一区二区| 91免费国产在线观看| 欧美区一区二区三区| 日韩免费高清电影| 亚洲色图在线看| 久久精品国产999大香线蕉| 成人18视频在线播放| 欧美日韩国产小视频| 亚洲国产精品ⅴa在线观看| 亚洲视频一区在线观看| 日本不卡不码高清免费观看| 国产91精品免费| 欧美老年两性高潮| 日本一区免费视频| 午夜精品久久久久久久| 顶级嫩模精品视频在线看| 中文字幕一区二区在线播放| 国产欧美一区视频| 亚洲国产精品影院| 国产一区二区精品久久| 欧美日韩国产天堂| 中文字幕在线播放不卡一区| 蜜臀国产一区二区三区在线播放| aaa国产一区| 精品成人一区二区三区| 亚洲国产精品久久一线不卡| 国产成人精品影视| 日韩三级视频在线观看| 亚洲一本大道在线| 不卡高清视频专区| 国产婷婷色一区二区三区| 婷婷成人激情在线网| av在线不卡免费看| 国产视频一区在线播放| eeuss鲁片一区二区三区在线观看| 99久久精品国产导航| 2024国产精品| 免费人成黄页网站在线一区二区| 91麻豆福利精品推荐| 欧美国产一区视频在线观看| 老鸭窝一区二区久久精品| 欧美日韩国产片| 亚洲福利电影网| 欧洲激情一区二区| 亚洲一区二区四区蜜桃| 91在线视频官网| 亚洲欧洲一区二区在线播放| 高清久久久久久| 日本一区二区不卡视频| 国产91精品露脸国语对白| 国产亚洲欧美色| 国产成人自拍网| 亚洲国产成人私人影院tom | 国产91清纯白嫩初高中在线观看| 337p亚洲精品色噜噜狠狠| 成人深夜福利app| 国模一区二区三区白浆| 欧美高清激情brazzers| 亚洲一区免费视频| 6080yy午夜一二三区久久| 亚洲图片一区二区| 欧美精品在线观看一区二区| 污片在线观看一区二区| 日韩欧美123| 国产成人三级在线观看| 国产精品美女一区二区三区| 91在线免费播放| 亚洲韩国精品一区| 日韩精品一区二区三区在线观看| 韩国av一区二区三区| 国产精品毛片无遮挡高清| 91欧美一区二区| 日韩综合小视频| 精品久久久久久最新网址| 国产v综合v亚洲欧| 亚洲一区二区欧美日韩| 精品国产乱子伦一区| 成人美女在线视频| 亚洲成av人片在线观看无码| 精品国产免费一区二区三区香蕉 | 日本一区二区三区四区在线视频| 99久久精品费精品国产一区二区| 亚洲观看高清完整版在线观看| 欧美日韩亚洲另类| 国产成人亚洲综合色影视| 依依成人精品视频| 久久久久久夜精品精品免费| 91美女片黄在线观看| 日韩精品一二三| 国产精品高清亚洲| 欧美一激情一区二区三区| 粉嫩在线一区二区三区视频| 亚洲免费视频中文字幕| 精品蜜桃在线看| 欧亚洲嫩模精品一区三区| 精品一二三四区| 亚洲一二三区在线观看| 久久久久久日产精品| 欧美人伦禁忌dvd放荡欲情| 国产成人在线影院| 男男gaygay亚洲| 亚洲午夜免费视频| 久久嫩草精品久久久久| 欧美日韩国产成人在线91 | 洋洋成人永久网站入口| 欧美日韩国产一区二区三区地区| 成人激情黄色小说| 日本欧美在线看| 一区二区三区91| 亚洲裸体xxx| 中文字幕中文乱码欧美一区二区| 日韩免费福利电影在线观看| 欧美日韩亚洲国产综合| 91麻豆国产福利在线观看| 成人美女视频在线观看18| 日韩精品电影在线| 天天做天天摸天天爽国产一区| 国产精品白丝在线| 国产精品视频一二三区| 久久精品亚洲国产奇米99| 精品国产髙清在线看国产毛片| 9191精品国产综合久久久久久 | 日韩免费观看高清完整版| 欧美日韩中文字幕一区二区| 一本色道亚洲精品aⅴ| www.性欧美| 91麻豆成人久久精品二区三区| www..com久久爱| 色婷婷久久综合| 色婷婷一区二区| 欧美视频在线播放| 在线成人av网站| 日韩视频一区在线观看| 欧美一级夜夜爽| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩免费看网站| 国产午夜精品在线观看| 欧美国产欧美综合| 成人免费在线视频观看| 亚洲欧美国产77777| 亚洲成av人片www| 日本vs亚洲vs韩国一区三区二区| 看电影不卡的网站| 国产高清在线精品| 91麻豆免费看| 欧美三电影在线| 欧美不卡视频一区| 国产精品乱人伦中文| 一区二区三区中文免费| 日韩精彩视频在线观看| 老鸭窝一区二区久久精品| 成人久久视频在线观看| 欧美中文字幕一区| 精品国产乱码91久久久久久网站| 国产欧美精品区一区二区三区 | 欧美精品一区男女天堂| 中文字幕不卡在线观看| 亚洲精品国产一区二区三区四区在线 | 精品电影一区二区| 欧美激情在线一区二区| 一区二区成人在线观看| 男男视频亚洲欧美| 99精品久久只有精品| 欧美精品免费视频| 久久一留热品黄| 亚洲狠狠爱一区二区三区| 黄页视频在线91| 欧美日韩中文字幕精品| 国产午夜亚洲精品羞羞网站| 亚洲国产色一区| 国产91精品露脸国语对白| 欧美日韩在线观看一区二区| 久久天天做天天爱综合色| 一区二区三区波多野结衣在线观看| 精品一区二区在线看| 欧美午夜不卡在线观看免费| 国产欧美一区二区精品性色超碰| 亚洲成av人**亚洲成av**|