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

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

?? ip.cpp

?? 《精通 vc++ 圖像編程》的源代碼
?? 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()

	參數:

		TD為時域值
		FD為頻域值
		power為2的冪數

	返回值:


	說明:

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

	/*計算傅立葉變換點數*/
	count=1<<power;
	
	/*分配運算所需存儲器*/
	W=(COMPLEX *)malloc(sizeof(COMPLEX)*count/2);
	X1=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
	X2=(COMPLEX *)malloc(sizeof(COMPLEX)*count);
	
	/*計算加權系數*/
	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()

	參數:

		FD為頻域值
		TD為時域值
		power為2的冪數

	返回值:


	說明:

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

	/*計算傅立葉反變換點數*/
	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;

	/*調用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()

	參數:

		f為時域值
		F為頻域值
		power為2的冪數

	返回值:


	說明:

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

	/*計算離散余弦變換點數*/
	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];
	}
	
	/*調用快速傅立葉變換*/
	FFT(X,X,power+1);
	
	/*調整系數*/
	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()

	參數:

		F為頻域值
		f為時域值
		power為2的冪數

	返回值:


	說明:

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区电影| 2020日本不卡一区二区视频| 日本午夜一区二区| 亚洲一区在线视频观看| 国产精品成人网| 欧美激情一区在线观看| 欧美一二三四在线| 91精品国产手机| 日韩一区二区电影在线| 日韩一区二区在线看片| 日韩丝袜情趣美女图片| 日韩欧美中文字幕制服| 精品奇米国产一区二区三区| 久久免费偷拍视频| 国产欧美一区二区三区在线看蜜臀| 久久夜色精品国产欧美乱极品| 久久欧美一区二区| 久久亚洲综合色一区二区三区| 久久婷婷色综合| 中文字幕在线观看不卡| 亚洲激情一二三区| 首页国产欧美久久| 麻豆久久久久久| 丰满亚洲少妇av| 色综合久久久久综合体桃花网| 欧美色视频一区| 久久久蜜臀国产一区二区| 国产精品亲子乱子伦xxxx裸| 一区二区三区在线视频免费| 香蕉成人伊视频在线观看| 精品一区二区综合| 不卡在线视频中文字幕| 欧美日韩国产小视频| 久久久久久日产精品| 一区二区三区中文字幕电影| 日韩av成人高清| 成人av资源网站| 制服丝袜亚洲色图| 国产精品欧美极品| 日本成人在线网站| 粉嫩13p一区二区三区| 欧美视频一区二| 精品对白一区国产伦| 亚洲一二三四在线| 大桥未久av一区二区三区中文| 色哟哟一区二区三区| 久久久国产午夜精品 | 欧美大片一区二区三区| 国产精品麻豆欧美日韩ww| 亚洲电影第三页| 国产精品1区2区| 欧美综合在线视频| 国产精品福利av| 激情图片小说一区| 欧洲人成人精品| 国产精品国产三级国产有无不卡 | 中文字幕一区二区三中文字幕| 午夜私人影院久久久久| 99热99精品| 久久婷婷国产综合精品青草| 丝袜美腿亚洲综合| 欧亚洲嫩模精品一区三区| 久久久精品免费网站| 麻豆久久久久久| 精品欧美乱码久久久久久| 亚洲一区在线视频观看| 99re在线精品| 国产欧美精品日韩区二区麻豆天美| 久久草av在线| 欧美一卡在线观看| 日本欧美肥老太交大片| 欧美大片免费久久精品三p| 性欧美疯狂xxxxbbbb| 在线一区二区观看| 一区二区三区日韩精品视频| av影院午夜一区| 国产精品乱子久久久久| 成人精品国产一区二区4080| 久久精品一区八戒影视| 美日韩一级片在线观看| 日韩欧美国产精品| 狠狠色狠狠色综合系列| 久久日韩精品一区二区五区| 久久精品国产精品亚洲综合| 精品国产乱码久久久久久牛牛| 久久66热偷产精品| 精品精品欲导航| 国产成人午夜99999| 欧美制服丝袜第一页| 久久免费偷拍视频| 国产成人av影院| 中文字幕不卡在线| eeuss影院一区二区三区| 最新不卡av在线| 在线看国产日韩| 视频精品一区二区| xfplay精品久久| 成人av网址在线观看| 亚洲美女淫视频| 欧美日本乱大交xxxxx| 久久99国产精品久久99| 国产精品色噜噜| 一区二区三区在线高清| 美女视频网站久久| 久久一区二区三区四区| 99精品热视频| 日韩精品电影在线| 国产视频一区不卡| 色婷婷综合五月| 久久精品国产亚洲aⅴ| 久久久99精品久久| 91福利精品第一导航| 视频一区视频二区中文| 久久蜜桃av一区精品变态类天堂| 91色视频在线| 麻豆成人综合网| 亚洲精品欧美在线| 欧美不卡一区二区| 91在线一区二区| 极品美女销魂一区二区三区 | 精品乱码亚洲一区二区不卡| 国产黄色91视频| 亚洲高清视频在线| 国产精品视频一二三区| 欧美日韩国产首页| caoporm超碰国产精品| 裸体健美xxxx欧美裸体表演| 日本一区二区高清| 欧美日韩国产不卡| 99久久99久久久精品齐齐| 久久国内精品自在自线400部| 亚洲欧美日韩一区| 国产亚洲1区2区3区| 欧美一区二区三级| 欧美三级资源在线| 91美女视频网站| 成人国产免费视频| 韩国精品主播一区二区在线观看 | av中文字幕在线不卡| 蜜桃一区二区三区四区| 亚洲综合一区二区精品导航| 中文字幕欧美一| 国产精品传媒在线| 国产精品素人视频| 亚洲国产精品传媒在线观看| 精品国产乱码久久久久久浪潮| 欧美日产国产精品| 欧美日韩美女一区二区| 在线日韩av片| 日本韩国一区二区三区| 99麻豆久久久国产精品免费| 岛国一区二区三区| 成人中文字幕电影| 成人激情黄色小说| 99久久精品情趣| jizz一区二区| 97久久超碰精品国产| 99久久精品99国产精品| 成人av网站在线观看| 99精品偷自拍| 色哦色哦哦色天天综合| 欧美在线free| 91精品欧美一区二区三区综合在 | 色婷婷综合在线| 在线看国产一区二区| 欧美日韩在线免费视频| 欧美美女黄视频| 日韩欧美卡一卡二| 国产亚洲欧美一区在线观看| 国产精品素人一区二区| 亚洲欧美一区二区三区极速播放 | 色噜噜狠狠成人网p站| 色先锋久久av资源部| 欧美日韩一区二区三区高清| 麻豆免费看一区二区三区| www.欧美精品一二区| 日韩美女视频在线| 亚瑟在线精品视频| 91浏览器在线视频| 欧美国产激情一区二区三区蜜月 | 精品久久久久久久久久久久久久久 | 色综合网站在线| 久久久久久久av麻豆果冻| 亚洲成人自拍偷拍| 色激情天天射综合网| 亚洲国产精品成人综合色在线婷婷 | 国产一区中文字幕| 日韩中文字幕av电影| 亚洲尤物视频在线| 亚洲国产一区视频| 另类人妖一区二区av| 东方aⅴ免费观看久久av| 91小视频在线观看| 欧美一级日韩免费不卡| 精品少妇一区二区三区在线播放| 久久色成人在线| 天天色 色综合| 99久久夜色精品国产网站| 欧美日韩一区视频| 国产精品久久久一区麻豆最新章节|