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

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

?? bmpproc.cpp

?? 用數字圖像處理主要是為了修改圖形,改善圖像質量,或是從圖像中提起有效信息,還有利用數字圖像處理可以對圖像進行體積.
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
}

BOOL CBmpProc::Create(int width, 
					  int height, 
					  WORD nBitCount, 
					  const void *lpBits)
{
	// 檢測寬度和高度值
	if ((width==0)||(height==0))
		return FALSE;

	// 檢測位數合法性
	if (!IsValidDibFormat(nBitCount))
		return FALSE;

	CBitmap		cBmp;
	HBITMAP		hBmp;
	int			iCurDevBitPix, iCurDevPlanes;

	// 獲取當前系統顯示器的顏色格式(位數和平面數)
	HWND hWnd = ::GetDesktopWindow();
	ASSERT(hWnd);
	HDC hDC = ::GetDC(hWnd);
	iCurDevBitPix = GetDeviceCaps(hDC,BITSPIXEL);
	iCurDevPlanes = GetDeviceCaps(hDC,PLANES);
	::ReleaseDC(hWnd, hDC);

	// 創建指定尺寸并兼容當前顯示器顏色格式的位圖(DDB)
	if (!cBmp.CreateBitmap(width, height, iCurDevPlanes, iCurDevBitPix, lpBits))
		return FALSE;

	hBmp = (HBITMAP)cBmp.Detach();
	ASSERT(hBmp);
	if (!hBmp)
		return FALSE;

	// 創建臨時位圖信息塊(不帶顏色表)
	LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)CreateMemoryBlockFromAddress(
		(LPVOID)NULL, sizeof(BITMAPINFOHEADER));
	if (!lpbi)
	{
		::DeleteObject(hBmp);
		return FALSE;
	}

	// 設置DIB信息塊內容
	lpbi->biSize = sizeof(BITMAPINFOHEADER);
	lpbi->biWidth = width;
	lpbi->biHeight = height;
	lpbi->biPlanes = 1;
	lpbi->biBitCount = nBitCount;
	if ((nBitCount==16)||(nBitCount==32))
		lpbi->biCompression = BI_BITFIELDS;
	else
		lpbi->biCompression = BI_RGB;

	// 計算設備分辯率
	hDC = ::GetDC(hWnd);
	lpbi->biXPelsPerMeter = \
		(GetDeviceCaps(hDC,HORZRES)*1000)/GetDeviceCaps(hDC,HORZSIZE);
	lpbi->biYPelsPerMeter = \
		(GetDeviceCaps(hDC,VERTRES)*1000)/GetDeviceCaps(hDC,VERTSIZE);
	::ReleaseDC(hWnd, hDC);

	lpbi->biClrUsed = 0;
	lpbi->biClrImportant = 0;
	lpbi->biSizeImage = CalculateDIBitsSize(lpbi);

	// 計算顏色表的尺寸
	WORD wPalSize = PaletteSize(lpbi);

	// 創建帶顏色表的信息塊,并復制lpbi信息塊中的內容
	LPBITMAPINFO pInfo = (LPBITMAPINFO)CreateMemoryBlockFromAddress(
		(LPVOID)lpbi, sizeof(BITMAPINFOHEADER)+wPalSize);
	if (!pInfo)
	{
		::free((void*)lpbi);
		::DeleteObject(hBmp);
		return FALSE;
	}

	ASSERT(pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	// 此時該結構已經無用,釋放
	::free((void*)lpbi);

	// 創建存放DIB位數據的緩沖區
	LPSTR pBits = (LPSTR)CreateMemoryBlockFromAddress((LPVOID)NULL, 
		pInfo->bmiHeader.biSizeImage);
	if (!pBits)
	{
		::free((void*)pInfo);
		::DeleteObject(hBmp);
		return FALSE;
	}

	// 下面的代碼并不是要獲取位圖的DIB位數據,而是要取得位圖的顏色表
	// 顏色表數據在函數(GetDIBits())調用成功后被填寫在pInfo結構中
	hDC = ::GetDC(hWnd);
	if (!::GetDIBits(hDC,hBmp,0,height,(LPVOID)pBits,pInfo,DIB_RGB_COLORS))
	{
		::free((void*)pBits);
		::free((void*)pInfo);
		::ReleaseDC(hWnd, hDC);
		::DeleteObject(hBmp);
		return FALSE;
	}
	::ReleaseDC(hWnd, hDC);

	// 此時并不需要DIB位數據,釋放
	::free((void*)pBits);

	// 刪除原來的圖像,并且設置新的位圖
	if (!ClearAndSetData(IT_CREATE,0,(LPCTSTR)"",pInfo,hBmp))
	{
		::free((void*)pInfo);
		::DeleteObject(hBmp);
		return FALSE;
	}

	return TRUE;
}



/*************************************************************************
 *
 * CreateCompatible()
 *
 * 參數說明:
 * 
 * int width				- 創建位圖的寬度
 * int height				- 創建位圖的高度
 * CDC *pDC, 				- 設備描述表(可以是NULL)
 * const void *lpBits		- 新位圖的初始化位數據(可以是NULL)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 根據指定的數據創建一個顏色格式兼容于指定描述表的位圖,并貼入本身類中
 * 
 * 注:
 * 
 * # 入口參數width和height不能是0,如果指定了0,函數返回FALSE
 * # 入口參數pDC可以是NULL,這時函數將按當前顯示器的顏色格式創建位圖,如果
 *   pDC不是NULL,則它必須指向一個有效的設備描述表
 * # 如果本身類中原來存在圖像,則調用函數成功之后,原來的圖像將被刪除
 * # 如果入口參數lpBits是NULL,則新創建的位不被初始化
 * 
 ************************************************************************/


BOOL CBmpProc::CreateCompatible(int width, 
								int height, 
								CDC *pDC, 
								const void *lpBits)
{
	// 檢測寬度和高度值
	if ((width==0)||(height==0))
		return FALSE;

	int	iCurDevBitPix, iCurDevPlanes;

	// 獲取當前系統顯示器的顏色格式(位數和平面數)
	HWND hWnd = ::GetDesktopWindow();
	ASSERT(hWnd);
	if (pDC == NULL)
	{
		// 如果沒有指定設備描述表,則使用當前顯示器的顏色格式
		HDC hDC = ::GetDC(hWnd);
		iCurDevBitPix = GetDeviceCaps(hDC,BITSPIXEL);
		iCurDevPlanes = GetDeviceCaps(hDC,PLANES);
		::ReleaseDC(hWnd, hDC);
	}
	else
	{
		iCurDevBitPix = GetDeviceCaps(pDC->GetSafeHdc(),BITSPIXEL);
		iCurDevPlanes = GetDeviceCaps(pDC->GetSafeHdc(),PLANES);
	}

	// 在16色的系統中,每像素的位數是1,而平面是4,將其顛倒后容易處理
	if ((iCurDevPlanes!=1)&&(iCurDevBitPix==1))
	{
		iCurDevBitPix = iCurDevPlanes;
		iCurDevPlanes = 1;
	}

	// 創建位圖(DDB)
	return Create(width, height, iCurDevBitPix, lpBits);
}



/*************************************************************************
 *
 * CopyFromObject()
 *
 * 參數說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標
 * CRect *pDesRect			- 目標矩形
 * CRect *pSouRect			- 源矩形
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 復制源位圖目標中指定區域(矩形)的圖像到本身類中圖像的指定區域
 * 
 * 如果入口參數pDesRect設為NULL,則目標矩形等于源圖像的尺寸
 * 如果入口參數pSouRect設為NULL,則源目標矩形等于源圖像的尺寸
 * 如果入口參數pDesRect和pSouRect不同,該函數可能會產生拉伸或壓縮動作
 * 
 * 注:# 本身類中原來必需已存在位圖,且調用之后的位圖不會被刪除
 *     # 如果源位圖類是空的,則返回FALSE
 *	   # 如果本身類中沒有位圖,則函數返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyFromObject(CBmpProc& souBmp, CRect *pDesRect, CRect *pSouRect)
{
	if (!IsValid())
		return FALSE;

	ASSERT(m_pInfo);
	ASSERT(m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	if (!souBmp.IsValid())
		return FALSE;

	ASSERT(souBmp.m_pInfo);
	ASSERT(souBmp.m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));


	// 如果未指定矩形數據,則使用源圖的矩形數據
	CRect dr;
	CRect sr;

	if (pDesRect == NULL)
		dr = souBmp.Rect();
	else
		dr = *pDesRect;

	if (pSouRect == NULL)
		sr = souBmp.Rect();
	else
		sr = *pSouRect;


	// 復制源圖
	CDC			compDC, compDC2;
	CBitmap		*pOldBmp, *pOldBmp2;

	// 創建與當前顯示設備兼容的內存設備描述表
	compDC.CreateCompatibleDC(NULL);
	compDC2.CreateCompatibleDC(NULL);

	pOldBmp	= compDC.SelectObject((CBitmap*)this);
	pOldBmp2= compDC2.SelectObject((CBitmap*)&souBmp);

	// 設置目標DC的拉伸模式為COLORONCOLOR,也就是不顯示拉伸掉的圖像
	compDC.SetStretchBltMode(COLORONCOLOR);

	// 復制指定尺寸的源位圖到目標位圖
	compDC.StretchBlt(dr.left, dr.top, dr.Width(), dr.Height(), 
			&compDC2, sr.left, sr.top, sr.Width(), sr.Height(), SRCCOPY);

	compDC2.SelectObject(pOldBmp2);
	compDC.SelectObject(pOldBmp);

	return TRUE;
}



/*************************************************************************
 *
 * CopyFromHbmp()
 *
 * 參數說明:
 * 
 * HBITMAP souBmp			- 源位圖句柄
 * CRect *pDesRect			- 目標矩形
 * CRect *pSouRect			- 源矩形
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 復制源位圖中指定區域(矩形)的圖像到本身類中圖像的指定區域
 * 
 * 如果入口參數pDesRect設為NULL,則目標矩形等于源圖像的尺寸
 * 如果入口參數pSouRect設為NULL,則源目標矩形等于源圖像的尺寸
 * 如果入口參數pDesRect和pSouRect不同,該函數可能會產生拉伸或壓縮動作
 * 
 * 注:# 本身類中原來必需已存在位圖,且調用之后的位圖不會被刪除
 *     # 如果源位圖類是空的,則返回FALSE
 *	   # 如果本身類中沒有位圖,則函數返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyFromHbmp(HBITMAP souBmp, 
							CRect *pDesRect, 
							CRect *pSouRect)
{
	// 檢查入口參數
	if (!souBmp)
		return FALSE;

	// 檢查本類中是否有圖像
	if (!IsValid())
		return FALSE;

	ASSERT(m_pInfo);
	ASSERT(m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	CBmpProc tmp;

	// 將句柄貼入臨時類中
	if (!tmp.Attach(souBmp))
		return FALSE;

	BOOL ret = CopyFromObject(tmp, pDesRect, pSouRect);

	tmp.Detach();

	return ret;
}



/*************************************************************************
 *
 * CopyTran()
 *
 * 參數說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標
 * COLORREF crColour		- 要濾掉或保留的顏色(缺省值是白色)
 * int x					- 目標矩形左上角X坐標(缺省值為0)
 * int y					- 目標矩形左上角Y坐標(缺省值為0)
 * CRect *pSouRect			- 源矩形(缺省值為NULL)
 * int mode					- 如果是0則將不拷貝指定的顏色,如果是1則保留指定
 *						      的顏色(缺省值為0)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 透明的復制源位圖目標中指定矩形的圖像到本身類中圖像的指定區域
 * 
 * 如果入口參數pSouRect設為NULL,則源目標矩形等于源圖像的尺寸。這樣該
 * 函數將不產生拉伸或壓縮動作。
 * 如果入口參數pSouRect不設為NULL,該函數會產生拉伸或壓縮動作
 * 
 * 注:# 本身類中原來必需已存在位圖,且調用之后的位圖不會被刪除
 *     # 如果源位圖類是空的,則返回FALSE
 *	   # 如果本身類中不存在位圖,函數將返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyTran(CBmpProc& souBmp, 
						COLORREF crColour, 
						int x, int y, 
						CRect *pSouRect, 
						int mode)
{
	if (!IsValid())
		return FALSE;

	ASSERT(m_pInfo);
	ASSERT(m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	if (!souBmp.IsValid())
		return FALSE;

	ASSERT(souBmp.m_pInfo);
	ASSERT(souBmp.m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	CRect dr(souBmp.Rect());
	dr.OffsetRect(x, y);

	return CopyTran(souBmp, crColour, &dr, pSouRect, mode);
}



/*************************************************************************
 *
 * CopyTran()
 *
 * 參數說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標
 * COLORREF crColour		- 要濾掉或保留的顏色(缺省值是白色)
 * CRect *pDesRect			- 目標矩形(缺省值為NULL)
 * CRect *pSouRect			- 源矩形(缺省值為NULL)
 * int mode					- 如果是0則將不拷貝指定的顏色,如果是1則保留指定
 *						      的顏色(缺省值為0)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 透明的復制源位圖目標中指定矩形的圖像到本身類中圖像的指定區域
 * 
 * 如果入口參數pDesRect設為NULL,則目標矩形等于源圖像的尺寸。
 * 如果入口參數pSouRect設為NULL,則源目標矩形等于源圖像的尺寸。
 * 如果pDesRect和pSouRect相同,則該函數將不會產生拉伸或壓縮動作。
 * 
 * 注:# 本身類中原來必需已存在位圖,且調用之后的位圖不會被刪除
 *     # 如果源位圖類是空的,則返回FALSE
 *	   # 如果本身類中不存在位圖,函數將返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyTran(CBmpProc& souBmp, 
						COLORREF crColour, 
						CRect *pDesRect, 
						CRect *pSouRect, 
						int mode)
{
	if (!IsValid())
		return FALSE;

	ASSERT(m_pInfo);
	ASSERT(m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));

	if (!souBmp.IsValid())
		return FALSE;

	ASSERT(souBmp.m_pInfo);
	ASSERT(souBmp.m_pInfo->bmiHeader.biSize == sizeof(BITMAPINFOHEADER));


	// 如果未指定矩形數據,則使用源圖的矩形數據
	CRect dr;
	CRect sr;

	if (pDesRect == NULL)
		dr = souBmp.Rect();
	else
		dr = *pDesRect;

	if (pSouRect == NULL)
		sr = souBmp.Rect();
	else
		sr = *pSouRect;

	// 復制源圖
	CDC			compDC;
	CBitmap		*pOldBmp;

	// 創建與當前顯示設備兼容的內存設備描述表
	compDC.CreateCompatibleDC(NULL);
	pOldBmp	= compDC.SelectObject((CBitmap*)this);

	// 復制指定尺寸的源位圖到目標位圖
	souBmp.DrawTransparentInRect(compDC, crColour, pDesRect, pSouRect, mode);

	compDC.SelectObject(pOldBmp);

	return TRUE;
}



/*************************************************************************
 *
 * CopyTranCenter()
 *
 * 參數說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標
 * CRect* crArea 			- 居中的范圍(缺省值為NULL)
 * COLORREF crColour		- 要濾掉或保留的顏色(缺省值是白色)
 * int mode					- 如果是0則將不拷貝指定的顏色,如果是1則保留指定
 *						      的顏色(缺省值為0)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 將源位圖透明的復制到本類中指定矩形的中央
 * 
 * 如果入口參數crArea設為NULL,則居中矩形等于本身類中圖像的尺寸。
 * 該函數不會產生拉伸或壓縮動作。
 * 
 * 注:# 本身類中原來必需已存在位圖,且調用之后的位圖不會被刪除
 *     # 如果源位圖類是空的,則返回FALSE

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩专区在线视频| 国产精品香蕉一区二区三区| 国产精品欧美精品| 国产成人亚洲综合a∨婷婷 | 亚洲欧美另类小说| 蜜臀久久99精品久久久久久9 | 麻豆91精品视频| 国产乱国产乱300精品| 奇米777欧美一区二区| 99re成人在线| www久久久久| 蜜臀av在线播放一区二区三区| 99精品国产视频| 国产欧美日韩麻豆91| 免费人成网站在线观看欧美高清| 色猫猫国产区一区二在线视频| 久久久av毛片精品| 久久99精品久久久久久| 欧美区在线观看| 亚洲一区免费在线观看| 色综合 综合色| 亚洲色图.com| 91视频com| 日韩电影一二三区| 欧美日韩国产a| 午夜精品123| 欧美日韩免费观看一区三区| 亚洲精品一二三区| 色噜噜夜夜夜综合网| 亚洲蜜臀av乱码久久精品蜜桃| av一区二区三区四区| 国产精品成人免费在线| 成人av在线播放网址| 国产精品久久影院| 91在线视频播放地址| 亚洲视频一区二区在线| 91丨九色丨尤物| 一区二区欧美在线观看| 在线观看日韩高清av| 亚洲男人电影天堂| 欧美视频一区在线| 日韩黄色免费网站| 精品国产一区二区在线观看| 国产精品一色哟哟哟| 欧美国产激情二区三区| 91老师片黄在线观看| 一区二区欧美视频| 日韩亚洲欧美一区| 国产美女精品在线| 亚洲欧洲日韩综合一区二区| 色婷婷综合久久| 视频一区免费在线观看| 精品国产髙清在线看国产毛片| 久久99久久精品欧美| 国产欧美精品一区二区色综合朱莉 | 亚洲成人午夜电影| 3d动漫精品啪啪一区二区竹菊| 日韩精品五月天| 精品成人私密视频| 一本大道综合伊人精品热热| 亚洲成人免费影院| 精品福利在线导航| 色婷婷亚洲精品| 免费成人性网站| 日本视频免费一区| 久久久午夜电影| 欧美在线啊v一区| 极品少妇一区二区三区精品视频| 中文字幕欧美三区| 欧美精品在欧美一区二区少妇| 九色综合狠狠综合久久| 日韩毛片精品高清免费| 日韩一区二区在线观看视频| 成人免费高清视频在线观看| 亚洲成av人片一区二区三区| 久久久午夜电影| 欧美人与禽zozo性伦| 白白色 亚洲乱淫| 奇米影视一区二区三区小说| 欧美—级在线免费片| 在线电影国产精品| 99国产精品视频免费观看| 天天射综合影视| 国产精品二三区| 久久综合色之久久综合| 欧美性xxxxxx少妇| av在线这里只有精品| 精一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 国产精品福利电影一区二区三区四区| 欧美一三区三区四区免费在线看| 成人高清免费观看| 国产乱人伦偷精品视频不卡| 午夜久久电影网| 依依成人精品视频| 中文字幕一区二区三区在线不卡 | 国产日产欧美一区| 日韩精品中文字幕在线一区| 在线精品观看国产| 色猫猫国产区一区二在线视频| 丁香婷婷综合激情五月色| 麻豆91免费观看| 麻豆国产一区二区| 美女一区二区三区在线观看| 午夜欧美2019年伦理 | 国产精品久久夜| 久久久www成人免费毛片麻豆 | 热久久久久久久| 亚洲国产成人av网| 亚洲最大的成人av| 亚洲精品成人天堂一二三| 国产精品网站一区| 中文乱码免费一区二区| 国产日韩成人精品| 国产精品美女久久久久高潮| 久久久青草青青国产亚洲免观| 26uuu色噜噜精品一区二区| 欧美电影免费观看高清完整版在| 777亚洲妇女| 欧美一区二区在线播放| 日韩欧美国产精品一区| 欧美大片在线观看一区二区| 精品日韩一区二区| 久久一日本道色综合| 国产日韩欧美综合在线| 国产视频一区二区三区在线观看| 欧美精品一区二区三区久久久| 欧美大片拔萝卜| 久久婷婷综合激情| 久久久精品2019中文字幕之3| 国产欧美精品日韩区二区麻豆天美| 国产免费成人在线视频| 国产精品久久三| 一区二区三区不卡视频在线观看| 亚洲国产视频在线| 青青草国产成人av片免费| 韩国午夜理伦三级不卡影院| 国产99久久久国产精品潘金| 99亚偷拍自图区亚洲| 欧美视频在线观看一区二区| 欧美一区二区女人| 欧美韩国一区二区| 一区二区欧美国产| 老汉av免费一区二区三区| 国产成人av电影在线播放| www.日韩在线| 欧美一区二区久久| 欧美国产综合色视频| 一区二区三区欧美亚洲| 青椒成人免费视频| 99re这里只有精品首页| 欧美日本在线播放| 国产亚洲一区二区在线观看| 亚洲综合在线视频| 国内成人精品2018免费看| www.成人网.com| 日韩一区二区三区在线| 国产精品卡一卡二| 久久成人久久鬼色| 91美女福利视频| 26uuu亚洲| 亚洲第一电影网| 成人app网站| 日韩视频123| 一区二区三区影院| 极品少妇一区二区| 在线成人av影院| 亚洲欧美另类小说| 国产成人免费视频网站 | 色播五月激情综合网| 精品久久久久久久久久久院品网| 国产精品白丝在线| 黑人巨大精品欧美黑白配亚洲| 欧美揉bbbbb揉bbbbb| 国产精品嫩草影院av蜜臀| 国产在线一区观看| 欧美精品在欧美一区二区少妇| ●精品国产综合乱码久久久久| 久久99久久99| 3atv一区二区三区| 亚洲一区免费在线观看| 99久久免费精品| 欧美国产日韩一二三区| 蜜桃精品视频在线观看| 欧美日韩国产在线观看| 亚洲卡通动漫在线| 99久久99久久综合| 国产精品理论在线观看| 国产xxx精品视频大全| 久久综合成人精品亚洲另类欧美 | 欧美激情中文字幕一区二区| 麻豆精品国产91久久久久久| 5566中文字幕一区二区电影| 亚洲国产一区二区视频| 在线观看成人小视频| 亚洲欧美色综合| 91影院在线观看| 亚洲人成伊人成综合网小说| 99久久夜色精品国产网站| 国产精品免费av|