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

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

?? bmpproc.cpp

?? 24點游戲,用c++實現
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

	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
 *	   # 如果本身類中不存在位圖,函數將返回FALSE
 * 
 ************************************************************************/


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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本韩国欧美一区二区三区| 成人黄色网址在线观看| 亚洲一区二区三区爽爽爽爽爽 | 亚洲人吸女人奶水| 久久久久9999亚洲精品| 久久蜜桃av一区二区天堂| 精品毛片乱码1区2区3区| 欧美一区二区大片| 久久免费美女视频| 久久久不卡影院| 国产精品日日摸夜夜摸av| 亚洲欧洲日产国码二区| 亚洲欧美日韩一区二区| 亚洲国产精品综合小说图片区| 亚洲v中文字幕| 久久99久久精品欧美| 国产精品99久久久| 成人a级免费电影| 欧美日韩一区二区欧美激情| 日韩三级免费观看| 国产精品沙发午睡系列990531| 国产精品成人在线观看| 亚洲国产综合在线| 国产一区二区在线视频| 91网上在线视频| 欧美一级久久久久久久大片| 国产午夜三级一区二区三| 一区二区三区四区亚洲| 午夜免费欧美电影| 国产经典欧美精品| 欧美日韩在线直播| 国产欧美精品国产国产专区| 亚洲一区二区精品视频| 国产99久久久久久免费看农村| 欧美视频精品在线| 国产亚洲精品资源在线26u| 亚洲精品欧美在线| 国产成人综合自拍| 7777精品伊人久久久大香线蕉 | 精品无人区卡一卡二卡三乱码免费卡 | 日韩av中文在线观看| 国产一区二区0| 欧美剧情片在线观看| 国产精品第一页第二页第三页| 午夜电影一区二区三区| 成人免费毛片高清视频| 欧美一区二区三区四区在线观看| 国产精品另类一区| 久久精品国产一区二区三区免费看| 色一情一伦一子一伦一区| 欧美大片拔萝卜| 亚洲狠狠爱一区二区三区| 成人午夜av在线| 日韩亚洲欧美高清| 亚洲一二三四在线| 99久久99精品久久久久久| 久久综合九色综合97婷婷 | 黄色日韩三级电影| 欧美日韩国产天堂| 一区二区三区四区五区视频在线观看| 国产91精品欧美| 精品电影一区二区三区| 婷婷亚洲久悠悠色悠在线播放| 91视频国产观看| 国产精品女主播av| 成人午夜精品在线| 国产精品免费人成网站| 国产老女人精品毛片久久| 欧美大片一区二区| 蜜臀av国产精品久久久久| 日韩视频在线一区二区| 奇米精品一区二区三区四区| 欧美日本在线观看| 日本视频在线一区| 精品久久免费看| 国产伦精品一区二区三区免费| 久久久美女艺术照精彩视频福利播放| 久久精品国产秦先生| 精品国产一区二区三区久久影院| 蜜桃av噜噜一区| 精品美女一区二区三区| 国产成人自拍网| 中文av字幕一区| 99re热视频这里只精品| 1000精品久久久久久久久| 日本精品一区二区三区高清| 亚洲精品视频在线| 欧美精品 日韩| 久久丁香综合五月国产三级网站| 精品国产乱码久久久久久老虎| 韩国精品在线观看| 国产精品美女久久久久aⅴ| 91色porny在线视频| 一区二区三区久久久| 欧美疯狂性受xxxxx喷水图片| 麻豆国产精品777777在线| 国产日产亚洲精品系列| 波多野结衣中文一区| 亚洲综合视频在线观看| 精品久久久久久最新网址| www.欧美日韩国产在线| 亚洲一区影音先锋| 欧美成人精品福利| 99久久99久久综合| 日本中文在线一区| 国产午夜精品一区二区三区四区| 99久久精品久久久久久清纯| 五月天激情综合| 国产欧美日韩在线| 51精品秘密在线观看| 国产成人午夜高潮毛片| 亚洲成人av一区二区| 久久久三级国产网站| 欧美性色黄大片| 国产精品一区久久久久| 亚洲小说春色综合另类电影| 精品盗摄一区二区三区| 欧美午夜影院一区| 国产精品综合二区| 亚洲成人动漫一区| 亚洲欧美日韩成人高清在线一区| 678五月天丁香亚洲综合网| 东方欧美亚洲色图在线| 蜜桃视频在线观看一区二区| 亚洲免费观看高清完整版在线| 精品1区2区在线观看| 欧美三级蜜桃2在线观看| 99久久精品免费看| 国产黄色91视频| 经典三级视频一区| 欧美96一区二区免费视频| 亚洲一区在线观看视频| 国产精品卡一卡二| 日本一区二区动态图| 精品美女一区二区| 日韩你懂的在线观看| 在线播放/欧美激情| 色偷偷久久一区二区三区| 成人免费观看视频| 国产成人av电影| 国产一区二区三区美女| 麻豆91小视频| 麻豆成人av在线| 蜜桃91丨九色丨蝌蚪91桃色| 午夜国产不卡在线观看视频| 亚洲一区二区精品3399| 亚洲另类色综合网站| 亚洲卡通动漫在线| 一二三四社区欧美黄| 亚洲欧美一区二区三区孕妇| 1区2区3区精品视频| 中文字幕亚洲一区二区av在线| 中文字幕av不卡| 国产精品久久久久一区二区三区| 国产人成亚洲第一网站在线播放| 久久尤物电影视频在线观看| 日韩欧美国产不卡| 欧美va在线播放| 久久精品亚洲精品国产欧美| 久久亚洲精精品中文字幕早川悠里| 亚洲精品一区在线观看| 2022国产精品视频| 中文字幕av免费专区久久| 中文字幕在线不卡| 亚洲一区二区三区四区在线免费观看 | 欧美va天堂va视频va在线| 精品美女被调教视频大全网站| 精品久久久久久无| 国产日韩欧美高清在线| 亚洲日本护士毛茸茸| 亚洲国产日韩精品| 奇米777欧美一区二区| 国产麻豆视频一区二区| 成人性视频免费网站| 一本久久a久久免费精品不卡| 欧美日韩一二三区| 2014亚洲片线观看视频免费| 国产日韩欧美高清| 亚洲成人动漫av| 国产精品一区三区| 欧美性一区二区| 国产欧美一区二区在线观看| 亚洲另类在线制服丝袜| 奇米色一区二区| 成人美女视频在线观看18| 欧美写真视频网站| 久久这里只有精品视频网| 亚洲综合色在线| 国产一区二区三区综合| 91久久精品日日躁夜夜躁欧美| 欧美一二三区在线| 亚洲免费观看高清完整版在线观看| 免费成人性网站| 91国偷自产一区二区使用方法| 日韩欧美色电影| 一区二区国产盗摄色噜噜| 国产一区二区视频在线| 7777精品伊人久久久大香线蕉的| 中文av一区二区| 精品综合久久久久久8888|