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

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

?? bmpproc.cpp

?? 用數(shù)字圖像處理主要是為了修改圖形,改善圖像質(zhì)量,或是從圖像中提起有效信息,還有利用數(shù)字圖像處理可以對圖像進(jìn)行體積.
?? CPP
?? 第 1 頁 / 共 5 頁
字號(hào):
 *	   # 如果本身類中不存在位圖,函數(shù)將返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::CopyTranCenter(CBmpProc& souBmp, 
							  CRect* crArea, 
							  COLORREF crColour, 
							  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 rect(Rect());

	if (crArea)
		rect = *crArea;

	// 矩形坐標(biāo)規(guī)范化
	rect.NormalizeRect();

	if ((rect.Width()==0)||(rect.Height()==0))
		return FALSE;

	// 復(fù)制源圖
	CDC			compDC;
	CBitmap		*pOldBmp;

	// 創(chuàng)建與當(dāng)前顯示設(shè)備兼容的內(nèi)存設(shè)備描述表
	compDC.CreateCompatibleDC(NULL);
	pOldBmp	= compDC.SelectObject((CBitmap*)this);

	// 復(fù)制指定尺寸的源位圖到目標(biāo)位圖
	souBmp.DrawTranCenter(compDC, &rect, crColour, mode);

	compDC.SelectObject(pOldBmp);

	return TRUE;
}



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


BOOL CBmpProc::CopyTranTile(CBmpProc& souBmp, 
							CRect* crArea, 
							COLORREF crColour, 
							int mode)
{
	// 運(yùn)行環(huán)境檢測
	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));

	// 缺省情況下鋪設(shè)范圍就是本身位圖的尺寸
	CRect rect(Rect());

	if (crArea)
		rect = *crArea;	// 另外指定尺寸

	// 矩形坐標(biāo)規(guī)范化
	rect.NormalizeRect();

	if ((rect.Width()==0)||(rect.Height()==0))
		return FALSE;

	// 復(fù)制源圖
	CDC			compDC;
	CBitmap		*pOldBmp;

	// 創(chuàng)建與當(dāng)前顯示設(shè)備兼容的內(nèi)存設(shè)備描述表
	compDC.CreateCompatibleDC(NULL);
	pOldBmp	= compDC.SelectObject((CBitmap*)this);

	// 復(fù)制指定尺寸的源位圖到目標(biāo)位圖
	souBmp.DrawTranTile(compDC, &rect, crColour, mode);

	compDC.SelectObject(pOldBmp);
	
	return TRUE;
}



/*************************************************************************
 *
 * LoadFromClipboard()
 *
 * 參數(shù)說明:無
 * 
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取剪貼板中的DIB位圖到類中
 * 
 * 如果函數(shù)成功,則類中原來的位圖(如果有的話)將被刪除
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromClipboard()
{
	// 檢查剪貼板的有效性
	if (!PasteAvailable())
		return FALSE;

	// 打開剪貼板
	if (::OpenClipboard(NULL))
	{
		// 獲取剪貼板中的DIB數(shù)據(jù)
		HANDLE h = ::GetClipboardData(CF_DIB);

		if (!h)
		{
			CloseClipboard();
			return FALSE;
		}

		LPSTR lpDIB = (LPSTR)CreateMemoryBlockFromHandle(h);
		if (!lpDIB)
		{	// 讀入的剪貼板數(shù)據(jù)句柄不需要釋放,系統(tǒng)會(huì)自動(dòng)釋放
			CloseClipboard();
			return FALSE;
		}

		CloseClipboard();

		// 檢查DIB信息塊的有效性
		if (*((DWORD*)lpDIB) != sizeof(BITMAPINFOHEADER))
		{
			::free((void*)lpDIB);
			return FALSE;
		}

		// 復(fù)制信息塊
		ASSERT(CalculateDIBInfoSize((LPBITMAPINFOHEADER)lpDIB) >= sizeof(BITMAPINFOHEADER));
		LPBITMAPINFO pInfo = (LPBITMAPINFO)CreateMemoryBlockFromAddress(
			(LPVOID)lpDIB, CalculateDIBInfoSize((LPBITMAPINFOHEADER)lpDIB));
		if (!pInfo)
		{
			::free((void*)lpDIB);
			return FALSE;
		}

		// 計(jì)算位數(shù)據(jù)首地址
		LPSTR pBits = (LPSTR)FindDIBBits(lpDIB);
		ASSERT(pBits);

		// 制作DDB位圖
		HBITMAP hBmp;
		HWND hWnd = ::GetDesktopWindow();
		ASSERT(hWnd);
		HDC hDC = ::GetDC(hWnd);

		hBmp = ::CreateDIBitmap(hDC,		// 創(chuàng)建DDB位圖。(將DIB位數(shù)據(jù)
			(BITMAPINFOHEADER *)pInfo,		// 轉(zhuǎn)換為DDB位數(shù)據(jù))
			CBM_INIT, pBits, 
			(BITMAPINFO *)pInfo, 
			DIB_RGB_COLORS);

		::ReleaseDC(hWnd, hDC);

		// 創(chuàng)建完邏輯位圖后,從剪貼板中讀取的數(shù)據(jù)已無用,釋放
		::free((void*)lpDIB);

		if (hBmp)	// 成功
		{
			// 刪除原來的圖像,并且設(shè)置新的位圖
			if (!ClearAndSetData(IT_CLIP,0,(LPCTSTR)"",pInfo,hBmp))
			{
				::free((void*)pInfo);
				::DeleteObject(hBmp);
				return FALSE;
			}
			return TRUE;
		}
		else	// 失敗
		{
			::free((void*)pInfo);
			return FALSE;
		}
	}

  return FALSE;
}



/*************************************************************************
 *
 * LoadFromFile()
 *
 * 參數(shù)說明:
 * 
 * LPCTSTR lpszPathName		- 待讀入的位圖文件名稱(路徑)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取指定位圖文件到類中
 * 
 * 如果函數(shù)成功,則類中原來的位圖(如果有的話)將被刪除
 * 如果入口參數(shù)指定的文件不存在或不是一個(gè)位圖文件,則函數(shù)返回FALSE
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromFile(LPCTSTR lpszPathName)
{
	CFile file;
	LPBITMAPINFO lpbi;
	LPSTR pBits;
	HBITMAP hBmp;

	if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite))
		return FALSE;

	// 判斷文件是否是有效的BMP文件
	if (IsValidBmpFile(file) == FALSE)
	{
		file.Close();
		return FALSE;
	}

	// 讀取BMP文件信息
	if ((lpbi=GetBmpFileInfo(file)) == NULL)
	{
		file.Close();
		return FALSE;
	}

	// 本類不支持壓縮位圖,所以如果是壓縮位圖則返回FALSE
	if ((lpbi->bmiHeader.biCompression==BI_RLE4)||(lpbi->bmiHeader.biCompression==BI_RLE8))
	{
		::free((void*)lpbi);
		file.Close();
		return FALSE;
	}

	// 提取BMP位數(shù)據(jù)
	if ((pBits=GetBmpFileBits(file)) == NULL)
	{
		::free((void*)lpbi);
		file.Close();
		return FALSE;
	}


	HWND hWnd = ::GetDesktopWindow();
	ASSERT(hWnd);
	HDC hDC = ::GetDC(hWnd);

	hBmp = ::CreateDIBitmap(hDC,		// 創(chuàng)建DDB位圖。(將DIB位數(shù)據(jù)
		(BITMAPINFOHEADER *)lpbi,		// 轉(zhuǎn)換為DDB位數(shù)據(jù))
		CBM_INIT, pBits, 
		(BITMAPINFO *)lpbi, 
		DIB_RGB_COLORS);

	::ReleaseDC(hWnd, hDC);

	// 創(chuàng)建完邏輯位圖后,從文件中讀取的位數(shù)據(jù)已無用,釋放
	::free((void*)pBits);

	file.Close();

	if (hBmp)	// 成功
	{
		// 刪除原來的圖像,并且設(shè)置新的位圖
		if (!ClearAndSetData(IT_DISKFILE,0,lpszPathName,lpbi,hBmp))
		{
			::free((void*)lpbi);
			::DeleteObject(hBmp);
			return FALSE;
		}
		return TRUE;
	}
	else	// 失敗
	{
		::free((void*)lpbi);
		return FALSE;
	}
}



/*************************************************************************
 *
 * LoadFromResourceID()
 *
 * 參數(shù)說明:
 * 
 * UINT uID					- 待讀入的位圖資源名稱(標(biāo)識(shí)值)
 * HINSTANCE hInstance		- 位圖資源所在實(shí)例的句柄(如果它被設(shè)為NULL,則
 *							  函數(shù)將該值設(shè)為當(dāng)前應(yīng)用程序進(jìn)程)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取指定位圖資源到類中
 * 
 * 如果函數(shù)成功,則類中原來的位圖(如果有的話)將被刪除
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromResourceID(UINT uID, HINSTANCE hInst) 
{ 
	return LoadFromResourceName((LPCTSTR)MAKEINTRESOURCE(uID), hInst); 
}



/*************************************************************************
 *
 * LoadFromResourceName()
 *
 * 參數(shù)說明:
 * 
 * LPCTSTR lpResourceName	- 待讀入的位圖資源名稱(字符串)
 * HINSTANCE hInstance		- 位圖資源所在實(shí)例的句柄(如果它被設(shè)為NULL,則
 *							  函數(shù)將該值設(shè)為當(dāng)前應(yīng)用程序進(jìn)程)
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取指定位圖資源到類中
 * 
 * 如果函數(shù)成功,則類中原來的位圖(如果有的話)將被刪除
 * 
 ************************************************************************/


BOOL CBmpProc::LoadFromResourceName(LPCTSTR lpResourceName, 
									HINSTANCE hInstance)
{
	HINSTANCE	hInst = hInstance;
	HBITMAP hBmp = NULL;

	//如果入口參數(shù)hInstance是NULL,則函數(shù)將用當(dāng)前應(yīng)用程序進(jìn)程的實(shí)例句柄
	if (hInst == NULL)
		hInst = ::AfxGetResourceHandle();

	ASSERT(hInst);

	HRSRC hSrc = ::FindResource(hInst, lpResourceName, RT_BITMAP);
	BOOL bSuccess = FALSE;

	if (!hSrc)
		return bSuccess;

	// 由LoadResource()函數(shù)讀入的資源目標(biāo)不需要顯示的刪除它,Windows
	// 系統(tǒng)會(huì)自動(dòng)刪除。LockResource()鎖定的資源目標(biāo)也不需要顯示的解鎖
	HGLOBAL hResData = LoadResource(hInst, hSrc);
	if (hResData)
	{
		LPVOID lpResData = LockResource(hResData);
		if (lpResData)
		{
			// 如果是有效的DIB資源,則資源的首位應(yīng)該是BITMAPINFOHEADER
			// 結(jié)構(gòu)
			ASSERT(*((DWORD*)lpResData) == sizeof(BITMAPINFOHEADER));

			LPSTR pBits = FindDIBBits((LPSTR)lpResData);
			ASSERT(pBits > (LPSTR)lpResData);

			HWND hWnd = ::GetDesktopWindow();
			ASSERT(hWnd);
			HDC hDC = ::GetDC(hWnd);

			hBmp = CreateDIBitmap(hDC,			// 創(chuàng)建DDB位圖。(將DIB位數(shù)據(jù)
				(BITMAPINFOHEADER *)lpResData,	// 轉(zhuǎn)換為DDB位數(shù)據(jù))
				CBM_INIT, pBits, 
				(BITMAPINFO *)lpResData, 
				DIB_RGB_COLORS);

			::ReleaseDC(hWnd, hDC);

			if (hBmp)	// 成功
			{
				DWORD dwInfoSize = (DWORD)((LPSTR)pBits-(LPSTR)lpResData);
				ASSERT(dwInfoSize > (DWORD)(sizeof(BITMAPFILEHEADER)));

				LPBITMAPINFO lpbi = (LPBITMAPINFO)CreateMemoryBlockFromAddress(
					(LPVOID)NULL, dwInfoSize);
				if (lpbi)
				{
					// 復(fù)制位圖信息塊,因?yàn)閘pResData所指的內(nèi)存不是運(yùn)行時(shí)態(tài)庫
					// 函數(shù)分配的內(nèi)存塊,所以未用CreateMemoryBlockFromAddress()
					// 的復(fù)制功能
					::memcpy((void*)lpbi, (const void*)lpResData, dwInfoSize);
				}
				else
				{
					::DeleteObject(hBmp);
					return FALSE;
				}

				if ((((DWORD)lpResourceName)>>16) == 0)
				{// 如果指定資源時(shí)使用的是標(biāo)識(shí),則串指針的高16位是0
					// 刪除原來的圖像,并且設(shè)置新的位圖
					if (!ClearAndSetData(IT_RESOURCE,(DWORD)lpResourceName,(LPCTSTR)"",lpbi,hBmp))
					{
						::free((void*)lpbi);
						::DeleteObject(hBmp);
						return FALSE;
					}
				}
				else
				{
					// 刪除原來的圖像,并且設(shè)置新的位圖
					if (!ClearAndSetData(IT_RESOURCE,0, lpResourceName,lpbi,hBmp))
					{
						::free((void*)lpbi);
						::DeleteObject(hBmp);
						return FALSE;
					}
				}
				bSuccess = TRUE;
			}
		}
	}

	return bSuccess;
}



/*************************************************************************
 *
 * LoadFromObject()
 *
 * 參數(shù)說明:
 * 
 * CBmpProc& souBmp			- 源位圖目標(biāo)
 * CRect *pSouRect			- 復(fù)制矩形
 * 
 * 返回值:
 * 
 * BOOL						- 如果成功返回TRUE,否則返回FALSE
 * 
 * 描述:
 *
 * 讀取源位圖目標(biāo)中指定區(qū)域(矩形)的圖像到類中
 * 
 * 如果入

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本久久综合亚洲鲁鲁五月天| 国内精品在线播放| 成人免费av在线| 91麻豆精品国产无毒不卡在线观看| 国产精品毛片无遮挡高清| 青椒成人免费视频| 在线观看区一区二| 国产精品久久二区二区| 极品少妇xxxx偷拍精品少妇| 欧美亚洲愉拍一区二区| 中文字幕av一区 二区| 另类成人小视频在线| 欧美三级电影一区| 国产精品国产三级国产| 国产一区二三区| 日韩欧美激情在线| 亚洲成国产人片在线观看| av激情综合网| 国产偷国产偷精品高清尤物| 裸体一区二区三区| 51久久夜色精品国产麻豆| 亚洲国产视频网站| 91传媒视频在线播放| 最新日韩av在线| 91精品国产综合久久久久久久 | 欧美巨大另类极品videosbest| 国产精品久久久久影院亚瑟| 国产麻豆9l精品三级站| 欧美mv日韩mv| 久久国产精品第一页| 欧美一区二区三区啪啪| 丝袜美腿亚洲综合| 欧美日韩国产一级| 三级久久三级久久| 欧美精品一二三区| 五月婷婷欧美视频| 5858s免费视频成人| 日本美女一区二区| 日韩欧美国产不卡| 国产一区二区在线观看免费| 欧美精品一区二区三区四区| 久久电影网站中文字幕| 久久综合色一综合色88| 国产一区二区91| 国产色一区二区| 99久久精品免费看国产免费软件| 国产精品不卡一区| 一本到高清视频免费精品| 一区二区三区在线视频播放| 欧美日韩一区高清| 日韩电影免费在线看| 精品久久久久香蕉网| 国产成人综合精品三级| 综合久久久久综合| 在线一区二区视频| 丝袜诱惑制服诱惑色一区在线观看 | 久久99精品久久只有精品| 精品欧美一区二区久久| 国产精品亚洲一区二区三区在线| 国产精品理论在线观看| 欧洲中文字幕精品| 日本怡春院一区二区| 亚洲精品一区二区三区在线观看 | 丝袜亚洲精品中文字幕一区| 日韩无一区二区| 国产盗摄一区二区三区| 亚洲欧美一区二区三区国产精品 | 国产精品一区二区男女羞羞无遮挡| 国产欧美精品区一区二区三区 | 欧美日韩国产高清一区| 青青草伊人久久| 久久九九久久九九| 99久久伊人精品| 视频在线观看91| 国产日韩av一区| 欧美性猛交xxxx乱大交退制版| 亚洲国产成人porn| 精品国产污污免费网站入口 | 欧美日精品一区视频| 免费看日韩a级影片| 国产精品污网站| 欧美色窝79yyyycom| 久久精品国产亚洲5555| 国产欧美日韩不卡免费| 精品视频在线免费| 狠狠v欧美v日韩v亚洲ⅴ| 1000部国产精品成人观看| 7777精品伊人久久久大香线蕉超级流畅 | 色老头久久综合| 免费欧美高清视频| 国产精品美女一区二区三区| 欧美人体做爰大胆视频| 国产精品一色哟哟哟| 亚洲一区二区视频在线| 精品福利二区三区| 欧美性一区二区| 国产精品一卡二| 亚洲超碰97人人做人人爱| 久久精品视频在线看| 欧美日韩久久久| youjizz国产精品| 蜜臀av在线播放一区二区三区| 国产精品国产三级国产aⅴ中文| 制服.丝袜.亚洲.另类.中文 | 精品无人码麻豆乱码1区2区| 亚洲激情在线激情| 久久一留热品黄| 欧美三级日韩三级| 成人一二三区视频| 青青草伊人久久| 亚洲国产日韩a在线播放| 久久久久一区二区三区四区| 欧美日韩黄视频| 92国产精品观看| 国产成人精品午夜视频免费| 亚洲6080在线| 亚洲免费观看高清完整版在线| 久久久久久久综合日本| 欧美一区二区国产| 在线精品国精品国产尤物884a| 国产成人在线视频网址| 另类小说色综合网站| 亚洲国产日韩av| 伊人一区二区三区| 一区视频在线播放| 国产偷国产偷精品高清尤物| 精品欧美乱码久久久久久| 666欧美在线视频| 精品视频1区2区| 日本高清无吗v一区| 成人免费毛片片v| 国内精品久久久久影院一蜜桃| 日本网站在线观看一区二区三区| 亚洲无线码一区二区三区| 亚洲三级小视频| 亚洲欧洲国产日韩| 国产精品水嫩水嫩| 国产欧美一区在线| 久久人人97超碰com| 日韩三级av在线播放| 884aa四虎影成人精品一区| 欧美三级日本三级少妇99| 在线观看不卡视频| 91久久一区二区| 色94色欧美sute亚洲13| 91女人视频在线观看| 成人av综合在线| 白白色 亚洲乱淫| 99视频精品全部免费在线| eeuss影院一区二区三区| 风流少妇一区二区| 国产乱子轮精品视频| 久久精品国产一区二区| 久国产精品韩国三级视频| 日本伊人午夜精品| 美女网站色91| 精品一区二区三区日韩| 激情国产一区二区| 国内精品在线播放| 国产精品99久久久久久宅男| 国产91精品一区二区麻豆网站| 成人永久免费视频| 97se亚洲国产综合自在线| 色偷偷成人一区二区三区91| 欧美专区亚洲专区| 欧美日韩aaaaa| 日韩欧美不卡在线观看视频| 精品福利一区二区三区免费视频| 久久综合给合久久狠狠狠97色69| 久久精品亚洲精品国产欧美kt∨| 国产欧美精品一区aⅴ影院| 国产精品国产三级国产aⅴ入口| 一色屋精品亚洲香蕉网站| 一区二区不卡在线播放| 日韩国产欧美在线观看| 精品一区二区三区在线播放 | 日韩精品视频网| 免费观看一级特黄欧美大片| 激情深爱一区二区| 成人黄色av电影| 欧日韩精品视频| 日韩三区在线观看| 久久久精品国产免大香伊| 国产精品久久久久久久午夜片| 亚洲女与黑人做爰| 日韩精品每日更新| 国产精品一区二区无线| 91色视频在线| 91精品国产一区二区| 欧美精品一区二区精品网| 国产精品毛片久久久久久| 亚洲一区二区在线播放相泽| 极品美女销魂一区二区三区| 成人动漫av在线| 精品视频一区 二区 三区| 精品福利一二区| 亚洲免费大片在线观看| 蜜桃久久精品一区二区| 国产成a人亚洲| 欧美日韩在线播|