亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩黄色一区二区| 日韩精品亚洲一区| 亚洲美女区一区| 日韩精品亚洲专区| 国产精品一区二区在线观看不卡| 国产成人一级电影| 欧美影视一区二区三区| 日韩欧美色综合| 亚洲国产经典视频| 亚洲精品少妇30p| 久久精品国产亚洲高清剧情介绍| 成人一二三区视频| 欧美精品乱人伦久久久久久| 久久先锋影音av| 亚洲自拍偷拍欧美| 国产原创一区二区| 日本精品一级二级| 久久久久久久久一| 亚洲福利一区二区三区| 国产精品一品视频| 在线区一区二视频| 久久精子c满五个校花| 亚洲最新视频在线观看| 国产电影一区在线| 欧美日韩aaaaaa| 国产精品毛片无遮挡高清| 日本伊人色综合网| 不卡一卡二卡三乱码免费网站| 欧美日韩国产高清一区二区三区 | 洋洋av久久久久久久一区| 国产综合色精品一区二区三区| 色欧美日韩亚洲| 国产亚洲欧美激情| 奇米亚洲午夜久久精品| 91丨porny丨中文| 久久久久久久综合| 日韩国产精品久久久久久亚洲| 成人h动漫精品| 精品国产欧美一区二区| 亚洲成av人综合在线观看| 大胆亚洲人体视频| 精品国产一区二区三区久久影院 | 欧美亚洲国产bt| 久久久久高清精品| 青青草精品视频| 在线看日韩精品电影| 国产精品美女视频| 国产乱人伦偷精品视频免下载| 欧美一三区三区四区免费在线看 | 欧美色倩网站大全免费| 国产精品免费观看视频| 国产原创一区二区| 精品国产伦一区二区三区观看方式 | 狠狠色伊人亚洲综合成人| 欧美日韩精品免费| 一区二区三区欧美激情| jlzzjlzz亚洲女人18| 久久久久久一级片| 极品美女销魂一区二区三区| 91精品国产综合久久精品麻豆 | 欧美日韩国产高清一区| 一区二区三区**美女毛片| 成人免费视频一区| 中文字幕乱码日本亚洲一区二区 | 中文久久乱码一区二区| 国产麻豆精品一区二区| 久久久精品国产99久久精品芒果| 奇米精品一区二区三区四区| 欧美日本免费一区二区三区| 亚洲一区二区三区视频在线播放 | 视频一区二区三区在线| 欧美性高清videossexo| 一区二区三区在线观看动漫| 色婷婷亚洲婷婷| 亚洲摸摸操操av| 91国偷自产一区二区使用方法| 亚洲精品欧美激情| 色女孩综合影院| 一区二区三区四区国产精品| 欧美视频一区二区| 丝袜美腿成人在线| 欧美一区二区三区日韩视频| 青青草精品视频| 日韩女优电影在线观看| 韩国精品在线观看| 国产三级三级三级精品8ⅰ区| 国产精品一区二区三区四区| 国产精品美女久久久久aⅴ国产馆| 成人免费毛片片v| 综合激情成人伊人| 在线精品视频免费播放| 亚洲午夜私人影院| 欧美一级国产精品| 国产一区二区三区| 国产精品美女久久福利网站| 99re成人在线| 亚洲二区在线视频| 日韩一区二区视频在线观看| 久久99久久久久久久久久久| 久久天堂av综合合色蜜桃网| 成人动漫在线一区| 一区二区三区毛片| 欧美一区二区人人喊爽| 国产一区二区不卡老阿姨| 国产精品久久久久aaaa| 在线免费观看一区| 精品在线免费视频| 中文字幕在线一区免费| 欧美三区免费完整视频在线观看| 美女视频一区二区三区| 国产欧美一二三区| 欧美亚洲日本一区| 国产乱色国产精品免费视频| 亚洲理论在线观看| 日韩欧美成人午夜| 99精品偷自拍| 日韩高清一级片| 亚洲国产岛国毛片在线| 欧美日韩一区二区三区四区五区| 美女视频一区二区三区| 亚洲三级小视频| 日韩你懂的电影在线观看| 成人不卡免费av| 麻豆精品一区二区av白丝在线| 国产欧美va欧美不卡在线| 欧美偷拍一区二区| 国产精品亚洲专一区二区三区 | 色婷婷综合久久久久中文一区二区 | 91原创在线视频| 麻豆精品在线视频| 亚洲激情图片小说视频| 欧美r级电影在线观看| 色婷婷国产精品| 国产精品亚洲一区二区三区在线 | 欧美成人伊人久久综合网| 91丨九色丨黑人外教| 精品一区二区在线播放| 亚洲一二三专区| 国产精品免费aⅴ片在线观看| 欧美一区二区精品久久911| 91香蕉视频污| 国产麻豆日韩欧美久久| 丝袜亚洲精品中文字幕一区| 亚洲三级在线免费| 欧美激情综合网| 欧美r级电影在线观看| 欧美日韩一区二区三区在线 | 亚洲综合久久久久| 国产日韩在线不卡| 精品黑人一区二区三区久久 | 韩国中文字幕2020精品| 亚洲午夜一二三区视频| 1024成人网| 欧美激情艳妇裸体舞| 日韩网站在线看片你懂的| 欧美亚洲综合色| 91小视频在线免费看| 国产成都精品91一区二区三| 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩一区和二区| 欧美视频日韩视频| av成人动漫在线观看| 国产丶欧美丶日本不卡视频| 麻豆精品国产传媒mv男同| 亚洲成人免费观看| 亚洲在线中文字幕| 亚洲男人的天堂网| 国产精品白丝在线| 国产精品国产精品国产专区不片| 精品国产露脸精彩对白| 欧美一级欧美一级在线播放| 欧美三级乱人伦电影| 在线观看网站黄不卡| 91丨porny丨首页| 91麻豆国产福利精品| 92精品国产成人观看免费| 成人av网站在线观看免费| 粉嫩一区二区三区在线看| 国产精品影视在线| 国产成人av电影免费在线观看| 国产一区二区在线观看视频| 精品一区二区三区的国产在线播放| 日本不卡一二三区黄网| 日本在线不卡一区| 麻豆传媒一区二区三区| 免费一级片91| 毛片一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 久久精品国产精品亚洲综合| 久久国产精品一区二区| 久久超碰97人人做人人爱| 国内精品免费在线观看| 韩国成人精品a∨在线观看| 国内国产精品久久| 国产精品一区二区三区99| 东方欧美亚洲色图在线| 91女人视频在线观看| 欧美日韩国产精选| 日韩欧美自拍偷拍| 久久久久高清精品|