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

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

?? pointpro.cpp

?? VC++實(shí)際編程的源代碼 多種圖像邊緣檢測(cè)與分割處理
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
				pTemp[0] = pMap[pTemp[0]];
				pTemp[1] = pMap[pTemp[1]];
				pTemp[2] = pMap[pTemp[2]];
				pTemp[3] = pMap[pTemp[3]];
				pTemp += 4;
			}
		}
		break;
	}
	
	delete [] pMap;
	
	::GlobalUnlock( m_pDibObject->GetDib() );
	
	m_pDibObject->m_nLastError = IMAGELIB_SUCCESS;
	
	// 返回
	return TRUE;
}

////////////////////////////////////////////////////////////////////////
//BOOL GrayStretch()
//----------------------------------------------------------------------
//基本功能:本函數(shù)對(duì)傳入的CDibObject對(duì)象中的圖像進(jìn)行灰度拉伸變換。如果
//			進(jìn)行此調(diào)整之前沒(méi)有指定一個(gè)CDibObject對(duì)象指針,則必須在調(diào)整
//			時(shí)加以指定。任何未傳入的坐標(biāo)值或默認(rèn)的-1坐標(biāo)值都將被置為圖像
//			的最大值或最大植。變量nX1和nY1將被置為0,nX2將被置為圖像寬度
//			減1,nY2將被置為圖像高度減1。想要在整個(gè)圖像上進(jìn)行操作時(shí),最
//			好的方法是不傳入nX1、nY1、nX2和nY2值。這樣它們會(huì)被默認(rèn)為整個(gè)
//			圖像。
//----------------------------------------------------------------------
//參數(shù)說(shuō)明:BYTE bX1	灰度拉伸第一個(gè)點(diǎn)的x坐標(biāo)
//			BYTE bY1	灰度拉伸第一個(gè)點(diǎn)的y坐標(biāo)
//			BYTE bX2	灰度拉伸第二個(gè)點(diǎn)的x坐標(biāo)
//			BYTE bY2	灰度拉伸第二個(gè)點(diǎn)的y坐標(biāo)
//			int	nX1, 默認(rèn)為-1
//			int	nY1, 默認(rèn)為-1
//			int	nX2, 默認(rèn)為-1
//			int	nY2, 默認(rèn)為-1
//			CDibObject *pDibObject, 默認(rèn)為NULL
//----------------------------------------------------------------------
//返回:BOOL:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::GrayStretch(BYTE bX1,
									   BYTE bY1,
									   BYTE bX2,
									   BYTE bY2,
									   int nX1,
									   int nY1,
									   int nX2,
									   int nY2, 
									   CDibObject *pDibObject)
{
	//創(chuàng)建灰度映射表
	unsigned char *pMap = DoublePointLinerTran(bX1, bY1, bX2, bY2);

	//CDibObject對(duì)象指針
	if( pDibObject != NULL ) m_pDibObject = pDibObject;
	//若未指定 CDibObject 對(duì)象指針?lè)祷谾ALSE
	if( m_pDibObject == NULL ) return( FALSE );
	BOOL bLessThanHalf, bCompleteImage;	

	m_pDibObject->NormalizeCoordinates( &nX1, &nY1, &nX2, &nY2,
										&bCompleteImage, 
										&bLessThanHalf );
	//定義變量
	unsigned char *pBuffer, *pBits, *pTemp;
	BITMAPINFOHEADER *pBIH;
	RGBQUAD *pPalette;
	int nWidthBytes, nNumColors, x, y, i;
	
	//pBuffer: 獲得位圖數(shù)據(jù)指針
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
		m_pDibObject->GetNumBits() );
	if( pBuffer == NULL ) return( FALSE );
	
	//pBIH:獲得位圖信息頭地址
	pBIH = (BITMAPINFOHEADER *) &pBuffer[sizeof(BITMAPFILEHEADER)];
	//nNumColors:獲得調(diào)色板中的顏色數(shù)。圖像為16位色或更高時(shí)為0
	nNumColors = m_pDibObject->GetNumColors();
	//pPalette:獲得調(diào)色板數(shù)據(jù)地址
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	//pBits:獲得位圖數(shù)據(jù)地址
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+
		nNumColors*sizeof(RGBQUAD)];
	
	LOGPALETTE *pLogPal = m_pDibObject->GetLogPal();
	CPalette *_pPalette = m_pDibObject->GetPalette();
	
	switch( m_pDibObject->GetNumBits() )
	{
	case 1:
		for( y=nY1; y<=nY2; y++ )
		{
			unsigned char Mask;
			pTemp = pBits;
			pTemp += ( ( ( m_pDibObject->GetHeight() - 1 - y ) 
				* nWidthBytes ) + ( nX1 / 8 ) );
			for( x=nX1; x<=nX2; x++ )
			{
				Mask = 0x80 >> ( x & 7 );
				if( pTemp[0] & Mask ) pTemp[0] &= ( Mask ^ 0xff );
				else pTemp[0] |= Mask;
				if( ( x & 7 ) == 7 ) pTemp++;
			}
		}
		break;
	case 4:
		if( bCompleteImage )
		{
			_pPalette->DeleteObject();
			for( i=0; i<nNumColors; i++ )
			{
				pPalette[i].rgbRed = pMap[pPalette[i].rgbRed];
				pPalette[i].rgbGreen = pMap[pPalette[i].rgbGreen];
				pPalette[i].rgbBlue = pMap[pPalette[i].rgbBlue];
			}
			LOGPALETTE *pLogPal = m_pDibObject->CreateLogPalette( 
								pPalette, nNumColors );
			if( pLogPal != NULL )
			{
				_pPalette->CreatePalette( pLogPal );
				delete [] pLogPal;
			}
		}
		else
		{
			unsigned char ucRed, ucGreen, ucBlue, Data;
			for( y=nY1; y<=nY2; y++ )
			{
				pTemp = pBits;
				pTemp += ( ( ( m_pDibObject->GetHeight() - 1 - y )
					* nWidthBytes ) + ( nX1 / 2 ) );
				for( x=nX1; x<=nX2; x++ )
				{
					Data = *pTemp;
					if( !( x & 1 ) ) Data >>= 4;
					else Data &= 0x0f;
					ucRed = pPalette[Data].rgbRed;
					ucGreen = pPalette[Data].rgbGreen;
					ucBlue = pPalette[Data].rgbBlue;
					ucRed = pMap[ucRed];
					ucGreen = pMap[ucGreen];
					ucBlue = pMap[ucBlue];
					Data = (unsigned char) m_pDibObject->GetNearestIndex( ucRed, ucGreen, 
						ucBlue, pPalette, nNumColors );
					if( !( x & 1 ) )
					{
						Data <<= 4;
						(*pTemp) &= 0x0f;
						(*pTemp) |= Data;
					}
					else
					{
						(*pTemp) &= 0xf0;
						(*pTemp) |= Data;
						pTemp++;
					}
				}
			}
		}
		break;
	case 8:
		if( bCompleteImage )
		{
			_pPalette->DeleteObject();
			for( i=0; i<nNumColors; i++ )
			{
				pPalette[i].rgbRed = pMap[pPalette[i].rgbRed];
				pPalette[i].rgbGreen = pMap[pPalette[i].rgbGreen];
				pPalette[i].rgbBlue = pMap[pPalette[i].rgbBlue];
			}
			LOGPALETTE *pLogPal = m_pDibObject->CreateLogPalette( pPalette, nNumColors );
			if( pLogPal != NULL )
			{
				_pPalette->CreatePalette( pLogPal );
				delete [] pLogPal;
			}
		}
		else
		{
			unsigned char ucRed, ucGreen, ucBlue, Data;
			for( y=nY1; y<=nY2; y++ )
			{
				pTemp = pBits;
				pTemp += ( ( ( m_pDibObject->GetHeight() - 1 - y )
					* nWidthBytes ) + nX1 );
				for( x=nX1; x<=nX2; x++ )
				{
					Data = *pTemp;
					ucRed = pPalette[Data].rgbRed;
					ucGreen = pPalette[Data].rgbGreen;
					ucBlue = pPalette[Data].rgbBlue;
					ucRed = pMap[ucRed];
					ucGreen = pMap[ucGreen];
					ucBlue = pMap[ucBlue];
					Data = (unsigned char) m_pDibObject->GetNearestIndex( ucRed, 
						ucGreen, ucBlue, pPalette, nNumColors );
					*pTemp++ = Data;
				}
			}
		}
		break;
	case 16:
		unsigned char ucRed, ucGreen, ucBlue;
		for( y=0; y< nY2; y++ )
		{
			pTemp = pBits;
			pTemp += ( ( m_pDibObject->GetHeight() - 1 - y ) 
						* nWidthBytes );
			pTemp += ( nX1 * 2 );
			for( x=nX1; x<=nX2; x++ )
			{
				GETRGB555( ucRed, ucGreen, ucBlue, pTemp );
				ucRed = pMap[ucRed];
				ucGreen = pMap[ucGreen];
				ucBlue = pMap[ucBlue];
				PUTRGB555( ucRed, ucGreen, ucBlue, pTemp );
				pTemp += 2;
			}
		}
		break;
	case 24:
		for( y=nY1; y<=nY2; y++ )
		{
			pTemp = pBits;
			pTemp += ( ( ( m_pDibObject->GetHeight() - 1 - y )
				* nWidthBytes ) + ( nX1 * 3 ) );
			for( x=nX1; x<=nX2; x++ )
			{
				pTemp[0] = pMap[pTemp[0]];
				pTemp[1] = pMap[pTemp[1]];
				pTemp[2] = pMap[pTemp[2]];
				pTemp += 3;
			}
		}
		break;
	case 32:
		for( y=nY1; y<=nY2; y++ )
		{
			pTemp = pBits;
			pTemp += ( ( ( m_pDibObject->GetHeight() - 1 - y ) 
				* nWidthBytes ) + ( nX1 * 4 ) );
			for( x=nX1; x<=nX2; x++ )
			{
				pTemp[0] = pMap[pTemp[0]];
				pTemp[1] = pMap[pTemp[1]];
				pTemp[2] = pMap[pTemp[2]];
				pTemp[3] = pMap[pTemp[3]];
				pTemp += 4;
			}
		}
		break;
	}
	
	delete [] pMap;
	
	::GlobalUnlock( m_pDibObject->GetDib() );
	
	m_pDibObject->m_nLastError = IMAGELIB_SUCCESS;
	
	// 返回
	return TRUE;
}

////////////////////////////////////////////////////////////////////////
//BOOL InteEqualize(CDibObject *pDibObject)
//----------------------------------------------------------------------
//基本功能:本函數(shù)對(duì)傳入的CDibObject對(duì)象中的圖像進(jìn)行直方圖均衡。
//----------------------------------------------------------------------
//參數(shù)說(shuō)明:CDibObject *pDibObject, 默認(rèn)為NULL
//----------------------------------------------------------------------
//返回:BOOL:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::InteEqualize(CDibObject *pDibObject)
{
	//CDibObject對(duì)象指針
	if( pDibObject != NULL ) m_pDibObject = pDibObject;
	//若未指定 CDibObject 對(duì)象指針?lè)祷谾ALSE
	if( m_pDibObject == NULL ) return( FALSE );

	//只處理8位圖像
	if(m_pDibObject->GetNumBits() != 8) 
	{
		AfxMessageBox("目前只支持8位灰度圖像的處理!");
		return( FALSE );
	}
	
	//定義變量
	unsigned char *pBuffer, *pBits, *pTemp;
	BITMAPINFOHEADER *pBIH;
	RGBQUAD *pPalette;
	int nWidthBytes, nNumColors, x, y;

	int nWidth = m_pDibObject->GetWidth();
	int nHeight = m_pDibObject->GetHeight();

	//pBuffer: 獲得位圖數(shù)據(jù)指針
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
												m_pDibObject->GetNumBits() );
	if( pBuffer == NULL ) return( FALSE );

	//pBIH:獲得位圖信息頭地址
	pBIH = (BITMAPINFOHEADER *) &pBuffer[sizeof(BITMAPFILEHEADER)];
	//nNumColors:獲得調(diào)色板中的顏色數(shù)。圖像為16位色或更高時(shí)為0
	nNumColors = m_pDibObject->GetNumColors();
	//pPalette:獲得調(diào)色板數(shù)據(jù)地址
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	//pBits:獲得位圖數(shù)據(jù)地址
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+
										nNumColors*sizeof(RGBQUAD)];

	// 創(chuàng)建直方圖數(shù)據(jù)
	int *pHistogram = GetHistogram();

	// 灰度映射表
	BYTE bMap[256];

	int i, j;

	for(i = 0; i < 256; i++)
	{
		bMap[i] = 0;
	}
	
	// 計(jì)算灰度映射表
	for (i = 0; i < 256; i++)
	{
		// 初始為0
		long lTemp = 0;
		
		for (j = 0; j <= i ; j++)
		{
			lTemp += pHistogram[j];
		}
		
		// 計(jì)算對(duì)應(yīng)的新灰度值
		bMap[i] = (BYTE) (lTemp * 255 / nHeight / nWidth);
	}

	delete [] pHistogram;

	for(y = 0; y < nHeight; y++)
	{
		pTemp = pBits;
		pTemp += y * nWidthBytes;	//位圖數(shù)據(jù)下一行起始指針
		for(x = 0; x < nWidth; x++)
		{
			long lpSrc = pTemp[x];
			// 計(jì)算新的灰度值
			pTemp[x] = bMap[lpSrc];			
		}
	}
	
	::GlobalUnlock( m_pDibObject->GetDib() );

	// 返回
	return TRUE;
}

////////////////////////////////////////////////////////////////////////
//BOOL ReplaceColorPal()
//----------------------------------------------------------------------
//基本功能:本函數(shù)對(duì)傳入的CDibObject對(duì)象中的圖像用指定的偽彩色編碼表來(lái)
//			替換圖像的調(diào)試板。
//----------------------------------------------------------------------
//參數(shù)說(shuō)明:CDibObject *pDibObject, 默認(rèn)為NULL
//			BYTE * bpColorsTable	- 偽彩色編碼表
//----------------------------------------------------------------------
//返回:BOOL:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::ReplaceColorPal(CDibObject *pDibObject, 
										   BYTE *bpColorsTable)
{
	//CDibObject對(duì)象指針
	if( pDibObject != NULL ) m_pDibObject = pDibObject;
	//若未指定 CDibObject 對(duì)象指針?lè)祷谾ALSE
	if( m_pDibObject == NULL ) return( FALSE );
	
	//定義變量
	unsigned char *pBuffer;
	BITMAPINFOHEADER *pBIH;
	RGBQUAD *pPalette;
	int nWidthBytes, nNumColors;

	//pBuffer: 獲得位圖數(shù)據(jù)指針
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
												m_pDibObject->GetNumBits() );
	if( pBuffer == NULL ) return( FALSE );

	//pBIH:獲得位圖信息頭地址
	pBIH = (BITMAPINFOHEADER *) &pBuffer[sizeof(BITMAPFILEHEADER)];
	//nNumColors:獲得調(diào)色板中的顏色數(shù)。圖像為16位色或更高時(shí)為0
	nNumColors = m_pDibObject->GetNumColors();
	//pPalette:獲得調(diào)色板數(shù)據(jù)地址
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	//pBits:獲得位圖數(shù)據(jù)地址

	// 讀取偽彩色編碼,更新DIB調(diào)色板
	for(int i=0; i<256; i++ )
	{
		// 更新DIB調(diào)色板紅色分量
		pPalette[i].rgbRed = bpColorsTable[i * 4];
		// 更新DIB調(diào)色板綠色分量
		pPalette[i].rgbGreen = bpColorsTable[i * 4 + 1];

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品三级日韩久久| 免费高清在线视频一区·| 中文子幕无线码一区tr| 精品国产欧美一区二区| 精品国产乱码久久久久久蜜臀| 欧美电视剧在线看免费| 精品国产乱码久久久久久牛牛 | 91美女视频网站| 91一区二区在线观看| 色婷婷久久久综合中文字幕| 色欧美乱欧美15图片| 欧美三级视频在线观看| 欧美一级视频精品观看| 日韩精品一区二区三区视频在线观看| 日韩欧美成人一区| 国产人伦精品一区二区| 国产精品毛片无遮挡高清| 亚洲精品久久7777| 天天综合色天天综合色h| 日韩精品电影一区亚洲| 激情亚洲综合在线| 波多野结衣中文字幕一区二区三区| 99久久er热在这里只有精品66| 91蜜桃网址入口| 欧美精品九九99久久| 精品久久久三级丝袜| 国产精品天干天干在线综合| 亚洲激情综合网| 青娱乐精品在线视频| 高清成人免费视频| 在线观看日韩高清av| 日韩欧美久久一区| 国产精品美女久久久久aⅴ国产馆| 亚洲猫色日本管| 奇米色一区二区| 粉嫩一区二区三区性色av| 欧美综合视频在线观看| 精品福利在线导航| 日韩美女视频一区二区 | 91亚洲男人天堂| 欧美日韩不卡在线| 国产欧美日韩另类一区| 亚洲一二三区在线观看| 国精产品一区一区三区mba桃花| 99精品视频在线播放观看| 91精品啪在线观看国产60岁| 国产精品美女久久久久久久 | 国产成都精品91一区二区三| 色老头久久综合| 精品国产乱码久久久久久久| 有坂深雪av一区二区精品| 狠狠色丁香婷婷综合| 91美女在线观看| 久久久天堂av| 午夜精品福利一区二区蜜股av| 国产999精品久久久久久绿帽| 欧美无砖专区一中文字| 国产精品视频免费| 蜜臀av性久久久久蜜臀aⅴ| 色婷婷精品久久二区二区蜜臀av| 日韩欧美第一区| 亚洲一区二区美女| 不卡视频一二三四| 亚洲精品一线二线三线| 五月综合激情婷婷六月色窝| 成人av资源网站| 久久精品无码一区二区三区| 爽好久久久欧美精品| 日本精品一区二区三区四区的功能| 精品捆绑美女sm三区| 亚洲成人精品一区二区| 色综合久久久久综合99| 中文字幕乱码一区二区免费| 老司机精品视频导航| 欧美精品九九99久久| 亚洲精品videosex极品| 99精品黄色片免费大全| 久久久国产精品麻豆| 久久99最新地址| 91精品免费观看| 亚洲高清久久久| 色一情一伦一子一伦一区| 国产亚洲污的网站| 国产美女精品一区二区三区| 欧美一级理论性理论a| 亚洲一区二区三区小说| 色哟哟国产精品| 亚洲欧美日韩一区二区三区在线观看| 高清不卡一二三区| 国产欧美一区二区精品性色| 国产在线精品一区二区夜色 | 久久av老司机精品网站导航| 51精品国自产在线| 日韩国产欧美三级| 欧美日韩第一区日日骚| 午夜影视日本亚洲欧洲精品| 欧美日韩小视频| 亚洲 欧美综合在线网络| 欧美三级日韩在线| 图片区小说区区亚洲影院| 欧美美女一区二区| 日韩成人精品在线观看| 日韩午夜精品视频| 麻豆精品久久久| 欧美精品一区二区三区在线| 国产乱国产乱300精品| 久久嫩草精品久久久精品一| 韩国理伦片一区二区三区在线播放| 欧美mv和日韩mv的网站| 国产在线不卡一区| 国产精品私人影院| 99精品国产91久久久久久| 中文字幕一区二区在线播放| 一本久久a久久精品亚洲| 一区二区久久久| 制服丝袜激情欧洲亚洲| 蜜桃视频一区二区三区在线观看| 精品99一区二区| 国产成人鲁色资源国产91色综| 中文字幕免费一区| 色噜噜狠狠色综合中国| 日韩精品亚洲一区| 久久久久久麻豆| 9久草视频在线视频精品| 依依成人精品视频| 7777精品伊人久久久大香线蕉| 黄一区二区三区| 中文字幕色av一区二区三区| 91成人免费在线视频| 欧美aⅴ一区二区三区视频| 久久久久99精品国产片| 色综合久久综合网97色综合| 日本三级韩国三级欧美三级| 亚洲精品一区二区三区影院| 福利一区福利二区| 亚洲成人av福利| 国产亚洲欧美在线| 欧美在线观看一区| 国产美女精品在线| 亚洲男人天堂av| 欧美xxx久久| 91美女视频网站| 久久97超碰色| 亚洲欧美日韩在线不卡| 日韩女优电影在线观看| 91亚洲精品久久久蜜桃| 理论片日本一区| 亚洲美女区一区| 久久看人人爽人人| 欧洲另类一二三四区| 国产美女一区二区三区| 亚洲小说欧美激情另类| 国产欧美一区二区三区鸳鸯浴| 欧美性猛片aaaaaaa做受| 国产成人一级电影| 午夜伊人狠狠久久| 中文字幕一区二区三| 日韩欧美一区在线| 色婷婷久久综合| 国产成人午夜高潮毛片| 视频一区二区不卡| 亚洲美女一区二区三区| 久久亚洲一区二区三区四区| 欧美性大战xxxxx久久久| 国产成a人亚洲| 奇米影视7777精品一区二区| 亚洲人123区| 国产女主播视频一区二区| 日韩欧美一区在线| 欧洲一区二区三区在线| 不卡欧美aaaaa| 狠狠久久亚洲欧美| 婷婷国产v国产偷v亚洲高清| 亚洲男人的天堂在线观看| 日本一区二区三区在线不卡| 日韩欧美成人激情| 在线综合+亚洲+欧美中文字幕| 91在线高清观看| 成人午夜免费视频| 国产在线国偷精品产拍免费yy| 日韩高清一区在线| 一区二区三区久久久| 综合久久给合久久狠狠狠97色| 国产色一区二区| 26uuu久久综合| 精品国产一区二区亚洲人成毛片 | 亚洲丶国产丶欧美一区二区三区| 国产精品狼人久久影院观看方式| 精品不卡在线视频| 日韩欧美视频在线| 日韩一区二区三区在线视频| 欧美色偷偷大香| 在线观看亚洲精品| 日本韩国精品一区二区在线观看| 国产成人自拍在线| 国产电影精品久久禁18| 久久成人麻豆午夜电影| 久久国产精品99久久人人澡| 强制捆绑调教一区二区| 奇米影视一区二区三区|