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

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

?? pointpro.cpp

?? VC++實際編程的源代碼 多種圖像邊緣檢測與分割處理
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
		// 更新DIB調色板藍色分量
		pPalette[i].rgbBlue	= bpColorsTable[i * 4 + 2];
		// 更新DIB調色板保留位
		pPalette[i].rgbReserved	= 0;
	}
	::GlobalUnlock( m_pDibObject->GetDib() );
	return(TRUE);
}

////////////////////////////////////////////////////////////////////////
//unsigned char *PointSlopeLinerTran(float fa, float fb)
//----------------------------------------------------------------------
//基本功能:本函數計算點斜線性變換的灰度映射表,它是一個輔助函數,供點斜
//			線性變換函數使用。
//----------------------------------------------------------------------
//參數說明:float fa			線性變換的斜率
//			float fb			線性變換的截距
//----------------------------------------------------------------------
//返回:unsigned char *型的灰度映射表。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
unsigned char *CPointPro::PointSlopeLinerTran(float fa,
														 float fb)
{
	// 灰度映射表
	unsigned char *pMap = new unsigned char[256];
	
	// 計算灰度映射表
	for (int i = 0; i <= 255; i++)
	{
		float fTemp = fa * (float)(i) + fb;
		// 判斷是否超出范圍
		if (fTemp > 255)
		{
			// 直接賦值為255
			pMap[i] = 255;
		}
		else if (fTemp < 0)
		{
			// 直接賦值為0
			pMap[i] = 0;
		}
		else
		{
			// 四舍五入
			pMap[i] = (unsigned char) (fTemp + 0.5);
		}
	}
	return(pMap);
}

////////////////////////////////////////////////////////////////////////
//unsigned char *DoublePointLinerTran()
//----------------------------------------------------------------------
//基本功能:本函數計算點斜線性變換的灰度映射表,它是一個輔助函數,供點斜
//			線性變換函數使用。
//----------------------------------------------------------------------
//參數說明:BYTE bX1	灰度拉伸第一個點的x坐標
//			BYTE bY1	灰度拉伸第一個點的y坐標
//			BYTE bX2	灰度拉伸第二個點的x坐標
//			BYTE bY2	灰度拉伸第二個點的y坐標
//----------------------------------------------------------------------
//返回:unsigned char *型的灰度映射表。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
unsigned char * CPointPro::DoublePointLinerTran(BYTE bX1,
														   BYTE bY1,
														   BYTE bX2,
														   BYTE bY2)
{
	// 灰度映射表
	unsigned char *pMap = new unsigned char[256];

	// 計算灰度映射表
	for (int i = 0; i <= bX1; i++)
	{
		// 判斷bX1是否大于0(防止分母為0)
		if (bX1 > 0)
		{
			// 線性變換
			pMap[i] = (BYTE) bY1 * i / bX1;
		}
		else
		{
			// 直接賦值為0
			pMap[i] = 0;
		}
	}
	for (; i <= bX2; i++)
	{
		// 判斷bX1是否等于bX2(防止分母為0)
		if (bX2 != bX1)
		{
			// 線性變換
			pMap[i] = bY1 + (BYTE) ((bY2 - bY1) * (i - bX1) / (bX2 - bX1));
		}
		else
		{
			// 直接賦值為bY1
			pMap[i] = bY1;
		}
	}

	for (; i < 256; i++)
	{
		// 判斷bX2是否等于255(防止分母為0)
		if (bX2 != 255)
		{
			// 線性變換
			pMap[i] = bY2 + (BYTE) ((255 - bY2) * (i - bX2) / (255 - bX2));
		}
		else
		{
			// 直接賦值為255
			pMap[i] = 255;
		}
	}
	return(pMap);
}

////////////////////////////////////////////////////////////////////////
//BOOL IsBlackandWhite256(CDibObject *pDibObject)
//----------------------------------------------------------------------
//基本功能:本函數判斷傳入的CDibObject對象中的圖像是否為256級二值圖像。
//----------------------------------------------------------------------
//參數說明:CDibObject *pDibObject, 默認為NULL
//----------------------------------------------------------------------
//返回:BOOL:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::IsBlackandWhite256(CDibObject *pDibObject)
{
	//使用傳入的CDibObject對象
	if( pDibObject != NULL ) m_pDibObject = pDibObject;
	//無CDibObject對象, 返回FALSE
	if( m_pDibObject == NULL ) return( FALSE );

	//不是8位圖像,必不是256級灰度圖像,不處理返回FALSE
	if( !IsGray256() ) return( FALSE );

	unsigned char *pBuffer, *pBits, *pTemp;
	BITMAPINFOHEADER *pBIH;
	RGBQUAD *pPalette;
	int nWidthBytes, nNumColors;

	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, 
												m_pDibObject->GetNumBits() );
	if( pBuffer == NULL ) return( -1 );

	//pBIH:獲得位圖信息頭地址
	pBIH = (BITMAPINFOHEADER *) &pBuffer[sizeof(BITMAPFILEHEADER)];
	//nNumColors:獲得調色板中的顏色數。圖像為16位色或更高時為0
	nNumColors = m_pDibObject->GetNumColors();
	//pPalette:獲得調色板數據地址
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	//pBits:獲得位圖數據地址
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+
										nNumColors*sizeof(RGBQUAD)];
	//獲取灰度圖像的寬度和高度(以像素表示)
	int nWidth = pBIH->biWidth;
	int nHeight = pBIH->biHeight;

	for(int y = 0; y < nHeight; y++)
	{
		pTemp = pBits;
		pTemp += y * nWidthBytes;	//位圖數據下一行起始指針
		for(int x = 0; x < nWidth; x++)
		{
			if( pTemp[x] != 0 && pTemp[x] != 255) return(FALSE);			
		}
	}

	return(TRUE);
}


////////////////////////////////////////////////////////////////////////
//int *GetHistogram()   
//----------------------------------------------------------------------
//基本功能:本函數獲得傳入的CDibObject對象中圖像的直方圖。如果進行此調
//			整之前沒有指定一個CDibObject對象指針,則必須在調整時加以指
//			定。任何未傳入的坐標值或默認的-1坐標值都將被置為圖像的最大值
//			或最大植。變量nX1和nY1將被置為0,nX2將被置為圖像寬度減1,nY2
//			將被置為圖像高度減1。想要在整個圖像上進行操作時,最好的方法
//			是不傳入nX1、nY1、nX2和nY2值。這樣它們會被默認為整個圖像。
//----------------------------------------------------------------------
//參數說明:int	nX1, 默認為-1
//			int	nY1, 默認為-1
//			int	nX2, 默認為-1
//			int	nY2, 默認為-1
//			CDibObject *pDibObject, 默認為NULL。
//----------------------------------------------------------------------
//返    回:直方圖數組指針*pBuffer其中:
//			nHistogramBuffer[]		存儲亮度直方圖數據
//			nHistogramBuffer[256]	存儲紅色直方圖數據
//			nHistogramBuffer[512]	存儲綠色直方圖數據
//			nHistogramBuffer[768]	存儲藍直方圖數據
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
int *CPointPro::GetHistogram( int nX1, 
									int nY1,
									int nX2,
									int nY2,
									CDibObject *pDibObject)
{
	//使用傳入的CDibObject對象
	if( pDibObject != NULL ) m_pDibObject = pDibObject;
	//無CDibObject對象, 返回FALSE
	if( m_pDibObject == NULL ) return( FALSE );

	//坐標規整化
	m_pDibObject->NormalizeCoordinates( &nX1, &nY1, &nX2, &nY2 );

	//定義變量
	unsigned char *pBuffer, *pBits;
	RGBQUAD *pPalette;
	int nWidthBytes, nNumColors;

	//獲得圖像指針
	pBuffer = (unsigned char *) m_pDibObject->GetDIBPointer( &nWidthBytes, m_pDibObject->GetNumBits() );
	if( pBuffer == NULL ) return( NULL );

	//獲得顏色數
	nNumColors = m_pDibObject->GetNumColors();
	//獲得調色板指針
	pPalette = (RGBQUAD *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)];
	//獲得位圖數據指針
	pBits = (unsigned char *) &pBuffer[sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+nNumColors*sizeof(RGBQUAD)];

	//創建直方圖數據
	int *nHistogramBuffer = CreateHistogram( nX1, nY1, nX2, nY2, pBits, pPalette, nWidthBytes );

	::GlobalUnlock( m_pDibObject->GetDib() );

	return( nHistogramBuffer );

}

////////////////////////////////////////////////////////////////////////
//BOOL SplitChannels()   
//----------------------------------------------------------------------
//基本功能:本函數將傳入的CDibObject對象中的圖像分離成由紅、綠、藍分量
//			構成的256色灰度圖像。
//----------------------------------------------------------------------
//參數說明:CDibObject *pRed		指向紅色通道的圖像指針
//			CDibObject *pGreen	指向綠色通道的圖像指針
//			CDibObject *pBlue		指向藍色通道的圖像指針
//----------------------------------------------------------------------
//返    回:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::SplitChannels(CDibObject *pRed, 
							  CDibObject *pGreen, 
							  CDibObject *pBlue)
{
	//沒有傳入相應指針無法完成操作
	if(m_pDibObject == NULL)
	{
		AfxMessageBox("沒有傳入原始圖像,無法完成操作!");
		return FALSE;
	}

	if(pRed == NULL)
	{
		AfxMessageBox("沒有傳入紅色通道指針,無法完成操作!");
		return FALSE;
	}

	if(pGreen == NULL)
	{
		AfxMessageBox("沒有傳入綠色通道指針,無法完成操作!");
		return FALSE;
	}

	if(pBlue == NULL)
	{
		AfxMessageBox("沒有傳入藍色通道指針,無法完成操作!");
		return FALSE;
	}

	//已是256色灰度圖像不用再轉換
	if(IsGray256())
	{
		AfxMessageBox("已是256色灰度圖像,不能進行通道分離!");
		return FALSE;
	}

	//紅色通道
	MakeGray256(1, pRed);

	//綠色通道
	MakeGray256(2, pGreen);
	
	//藍色通道
	MakeGray256(3, pBlue);

	
	return TRUE;
}

////////////////////////////////////////////////////////////////////////
//BOOL GetMixedChannel()   
//----------------------------------------------------------------------
//基本功能:本函數獲得傳入的CDibObject對象中的圖像中的混合分量通道。
//----------------------------------------------------------------------
//參數說明:CDibObject *pMixed	指向混合通道的圖像指針
//----------------------------------------------------------------------
//返    回:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::GetMixedChannel(CDibObject *pMixed)
{
	//沒有傳入相應指針無法完成操作
	if(m_pDibObject == NULL)
	{
		AfxMessageBox("沒有傳入原始圖像,無法完成操作!");
		return FALSE;
	}

	if(pMixed == NULL)
	{
		AfxMessageBox("沒有傳入通道指針,無法完成操作!");
		return FALSE;
	}

	//已是256色灰度圖像不用再轉換
	if(IsGray256())
	{
		AfxMessageBox("已是256色灰度圖像,不能進行通道分離!");
		return FALSE;
	}

	MakeGray256(0, pMixed);

	return TRUE;
}

////////////////////////////////////////////////////////////////////////
//BOOL GetRedChannel()   
//----------------------------------------------------------------------
//基本功能:本函數獲得傳入的CDibObject對象中的圖像中的紅色分量通道。
//----------------------------------------------------------------------
//參數說明:CDibObject *pRed	指向紅色通道的圖像指針
//----------------------------------------------------------------------
//返    回:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::GetRedChannel(CDibObject *pRed)
{
	//沒有傳入相應指針無法完成操作
	if(m_pDibObject == NULL)
	{
		AfxMessageBox("沒有傳入原始圖像,無法完成操作!");
		return FALSE;
	}

	if(pRed == NULL)
	{
		AfxMessageBox("沒有傳入紅色通道指針,無法完成操作!");
		return FALSE;
	}

	//已是256色灰度圖像不用再轉換
	if(IsGray256())
	{
		AfxMessageBox("已是256色灰度圖像,不能進行通道分離!");
		return FALSE;
	}

	//紅色通道
	MakeGray256(1, pRed);
	
	return TRUE;
}

////////////////////////////////////////////////////////////////////////
//BOOL GetGreenChannel()   
//----------------------------------------------------------------------
//基本功能:本函數獲得傳入的CDibObject對象中的圖像中的綠色分量通道。
//----------------------------------------------------------------------
//參數說明:CDibObject *pGreen	指向混合通道的圖像指針
//----------------------------------------------------------------------
//返    回:成功返回TRUE,失敗返回FALSE。
//----------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
BOOL CPointPro::GetGreenChannel(CDibObject *pGreen)
{
	//沒有傳入相應指針無法完成操作
	if(m_pDibObject == NULL)
	{
		AfxMessageBox("沒有傳入原始圖像,無法完成操作!");
		return FALSE;
	}

	if(pGreen == NULL)
	{
		AfxMessageBox("沒有傳入通道指針,無法完成操作!");
		return FALSE;
	}

	//已是256色灰度圖像不用再轉換
	if(IsGray256())
	{
		AfxMessageBox("已是

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区在线| 精品91自产拍在线观看一区| 18欧美乱大交hd1984| 9人人澡人人爽人人精品| 国产精品精品国产色婷婷| 91亚洲精品一区二区乱码| 一区二区在线免费| 56国语精品自产拍在线观看| 黄色日韩网站视频| 国产精品国产a级| 欧美伊人精品成人久久综合97 | 欧美又粗又大又爽| 亚洲综合一二区| 欧美一区二区私人影院日本| 久久国产麻豆精品| 国产精品久久久久久久蜜臀| 欧美影视一区二区三区| 美国av一区二区| 国产精品乱子久久久久| 欧美日韩另类一区| 国产一区美女在线| 一区二区三区国产精华| 日韩一区二区三区电影在线观看| 国产成人欧美日韩在线电影| 亚洲精品免费在线播放| 欧美一区二区精品| 99re热这里只有精品视频| 石原莉奈在线亚洲三区| 国产日韩影视精品| 精品视频1区2区| 国产成人午夜视频| 日韩av一区二| 亚洲人被黑人高潮完整版| 精品福利一区二区三区| 色综合中文字幕国产 | 欧美精品三级在线观看| 国产精品一区二区91| 亚洲香肠在线观看| 久久精品网站免费观看| 欧美日韩成人一区| 99re热这里只有精品免费视频| 日本视频中文字幕一区二区三区| 欧美激情一区在线| 日韩一区二区视频| 欧美色成人综合| 波多野结衣视频一区| 麻豆传媒一区二区三区| 夜夜嗨av一区二区三区| 国产精品日韩成人| 精品欧美一区二区久久| 在线成人午夜影院| 91黄色小视频| 92精品国产成人观看免费| 国产精选一区二区三区| 美日韩一级片在线观看| 午夜激情一区二区三区| 亚洲精品国久久99热| 欧美极品美女视频| 久久综合九色综合97婷婷女人 | 在线观看一区不卡| 成人午夜激情影院| 国产高清久久久| 精品一区二区三区免费| 免费人成网站在线观看欧美高清| 亚洲精品久久久久久国产精华液| 国产精品久久国产精麻豆99网站| 久久久影视传媒| 亚洲精品一区二区精华| 日韩精品在线看片z| 欧美高清视频www夜色资源网| 欧美亚洲国产怡红院影院| 色婷婷精品久久二区二区蜜臀av| 99久精品国产| 不卡的av网站| 99精品欧美一区二区三区综合在线| 国产乱子伦一区二区三区国色天香| 麻豆91在线播放免费| 久久国产精品露脸对白| 麻豆精品久久精品色综合| 久久精品国产99国产精品| 麻豆freexxxx性91精品| 国内成人自拍视频| 国产成人av网站| 成人av动漫网站| 91毛片在线观看| 欧美天堂一区二区三区| 欧美三级电影在线观看| 欧美美女喷水视频| 日韩久久精品一区| 国产欧美1区2区3区| 国产精品伦一区二区三级视频| 亚洲欧美一区二区不卡| 亚洲第一成年网| 日韩高清不卡一区二区三区| 老司机精品视频导航| 国产精品小仙女| 99热国产精品| 欧美日韩国产系列| 久久你懂得1024| 亚洲欧洲日韩在线| 五月婷婷综合在线| 国产一区二区三区日韩| 99久久国产免费看| 欧美疯狂性受xxxxx喷水图片| 欧美一区国产二区| 久久精品亚洲国产奇米99| 亚洲人成网站在线| 青青草伊人久久| 国产99久久久国产精品潘金| 在线一区二区观看| 欧美不卡激情三级在线观看| 国产日韩欧美在线一区| 亚洲综合清纯丝袜自拍| 久久精品国产99国产精品| 不卡av免费在线观看| 欧美裸体bbwbbwbbw| 久久精品视频免费| 亚洲成人精品一区二区| 国产精品一区二区三区四区| 欧洲av在线精品| 欧美电视剧在线看免费| 亚洲男帅同性gay1069| 蜜桃视频一区二区| 色婷婷综合久久久| 久久久久久久久久久电影| 一二三区精品视频| 豆国产96在线|亚洲| 欧美一区二区三区小说| 成人欧美一区二区三区视频网页| 日本sm残虐另类| 色综合久久综合网| 久久精品视频一区二区三区| 天天操天天干天天综合网| 不卡一区中文字幕| 久久综合久色欧美综合狠狠| 性感美女极品91精品| 成人精品高清在线| 精品国内片67194| 亚洲国产精品一区二区www| 丁香婷婷综合色啪| 精品剧情v国产在线观看在线| 亚洲一区二区三区四区在线免费观看| 国产精品中文欧美| 日韩欧美一二三四区| 亚洲gay无套男同| 在线一区二区三区| 亚洲码国产岛国毛片在线| 国产.欧美.日韩| 精品国产123| 久久精品二区亚洲w码| 欧美日韩美少妇| 亚洲网友自拍偷拍| 91浏览器在线视频| 国产精品久久久久久久久免费桃花 | 国产精品1区二区.| 精品久久久久一区二区国产| 丝袜诱惑制服诱惑色一区在线观看| 色88888久久久久久影院野外| 国产欧美精品日韩区二区麻豆天美| 免费在线看成人av| 欧美一区二区播放| 日韩av高清在线观看| 欧美精品日韩一本| 婷婷国产在线综合| 欧美一级理论片| 蜜臂av日日欢夜夜爽一区| 日韩午夜av电影| 加勒比av一区二区| 久久久久亚洲综合| 国产成人精品网址| 中文欧美字幕免费| 99v久久综合狠狠综合久久| 亚洲日本在线视频观看| av电影一区二区| 夜夜揉揉日日人人青青一国产精品 | 天天色 色综合| 精品少妇一区二区三区在线播放| 免费高清在线视频一区·| 日韩欧美黄色影院| 国产麻豆精品久久一二三| 国产精品久久久久久久久果冻传媒 | 精品国产乱子伦一区| 蜜臀av性久久久久蜜臀aⅴ| 日韩精品一区二区三区中文精品| 九色综合狠狠综合久久| 国产欧美一区二区三区鸳鸯浴| 成人视屏免费看| 亚洲精品久久久久久国产精华液| 欧美美女一区二区在线观看| 激情国产一区二区| 国产精品乱人伦| 欧美日韩国产电影| 国产一区二区在线免费观看| 国产精品入口麻豆原神| 欧美午夜视频网站| 国产综合成人久久大片91| 日韩美女视频一区二区 | 久久网站最新地址| 成人av在线看| 日韩高清一区二区|