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

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

?? ddb.cpp

?? Windows 圖形編程 書籍
?? CPP
字號(hào):
//-----------------------------------------------------------------------------------//
//              Windows Graphics Programming: Win32 GDI and DirectDraw               //
//                             ISBN  0-13-086985-6                                   //
//                                                                                   //
//  Written            by  Yuan, Feng                             www.fengyuan.com   //
//  Copyright (c) 2000 by  Hewlett-Packard Company                www.hp.com         //
//  Published          by  Prentice Hall PTR, Prentice-Hall, Inc. www.phptr.com      //
//                                                                                   //
//  FileName   : ddb.cpp						                                     //
//  Description: Device Dependent Bitmap Wrapping Class                              //
//  Version    : 1.00.000, May 31, 2000                                              //
//-----------------------------------------------------------------------------------//

#define STRICT
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <assert.h>
#include <tchar.h>
#include <math.h>

#include "DDB.h"

// quey size, prepare memory DC, select bitmap into memory DC
bool KDDB::Prepare(int & width, int & height)
{
	BITMAP bmp;

	if ( ! GetObject(m_hBitmap, sizeof(bmp), & bmp) )
		return false;

	width  = bmp.bmWidth;
	height = bmp.bmHeight;

	if ( m_hMemDC==NULL )	// ensure memdc is created
	{
		HDC hDC = GetDC(NULL);
		m_hMemDC = CreateCompatibleDC(hDC);
		ReleaseDC(NULL, hDC);

		m_hOldBmp = (HBITMAP) SelectObject(m_hMemDC, m_hBitmap);
	}

	return true;
}

// Convert color DDB into monochrome mask based on a back ground color
HBITMAP KDDB::CreateMask(COLORREF crBackGround, HDC hMaskDC)
{
	int width, height;

	if ( ! Prepare(width, height) )
		return NULL;

	HBITMAP hMask   = CreateBitmap(width, height, 1, 1, NULL);
	HBITMAP hOld    = (HBITMAP) SelectObject(hMaskDC, hMask);

	SetBkColor(m_hMemDC, crBackGround);
	BitBlt(hMaskDC, 0, 0, width, height, m_hMemDC, 0, 0, SRCCOPY);

	return hOld;
}

// Relase resource
void KDDB::ReleaseDDB(void)
{
	if ( m_hMemDC )
	{
		SelectObject(m_hMemDC, m_hOldBmp);
		DeleteObject(m_hMemDC);
		m_hMemDC = NULL;
	}

	if ( m_hBitmap )
	{
		DeleteObject(m_hBitmap);
		m_hBitmap = NULL;
	}

	m_hOldBmp = NULL;
}


BOOL KDDB::Attach(HBITMAP hBmp)
{
	if ( hBmp==NULL )
		return FALSE;

	if ( m_hOldBmp )	// deselected m_hBitmap
	{
		SelectObject(m_hMemDC, m_hOldBmp);
		m_hOldBmp = NULL;
	}

	if ( m_hBitmap )	// delete current bitmap
		DeleteObject(m_hBitmap);

	m_hBitmap = hBmp;	// replace with new one

	if ( m_hMemDC )		// select if has memory DC
	{
		m_hOldBmp = (HBITMAP) SelectObject(m_hMemDC, m_hBitmap);
		return m_hOldBmp != NULL;
	}
	else
		return TRUE;
}


BOOL KDDB::Draw(HDC hDC, int x0, int y0, int w, int h, DWORD rop, int opt)
{
	int bmpwidth, bmpheight;

	if ( ! Prepare(bmpwidth, bmpheight) )
		return FALSE;

	switch ( opt )
	{
		case draw_normal:
			return BitBlt(hDC, x0, y0, bmpwidth, bmpheight, m_hMemDC, 0, 0, rop);

		case draw_center:
			return BitBlt(hDC, x0 + (w-bmpwidth)/2, y0 + ( h-bmpheight)/2,
				bmpwidth, bmpheight, m_hMemDC, 0, 0, rop);
			break;

		case draw_tile:
		{
			for (int j=0; j<h; j+= bmpheight)
			for (int i=0; i<w; i+= bmpwidth)
				if ( ! BitBlt(hDC, x0+i, y0+j, bmpwidth, bmpheight, m_hMemDC, 0, 0, rop) )
					return FALSE;

			return TRUE;
		}
		break;

		case draw_stretch:
			return StretchBlt(hDC, x0, y0, w, h, m_hMemDC, 0, 0, bmpwidth, bmpheight, rop);

		case draw_stretchprop:
		{
			int ww = w;
			int hh = h;

			if ( w * bmpheight < h * bmpwidth )	// w/bmWidth is the mimimum scale
				hh = bmpheight * w / bmpwidth;
			else
				ww = bmpwidth  * h / bmpheight;

			// propertional scaling and centering
			return StretchBlt(hDC, x0 + (w-ww)/2, y0 + (h-hh)/2, ww, hh, m_hMemDC, 0, 0, bmpwidth, bmpheight, rop);
		}

		default:
			return FALSE;
	}
}

// Generate a text description of DDB format
void DecodeDDB(HGDIOBJ hBmp, TCHAR mess[])
{
	BITMAP  bmp;

	if ( GetObject(hBmp, sizeof(bmp), & bmp) )
	{
		wsprintf(mess, _T("%dx%dx%dx%d w=%d, 0x%x"), bmp.bmWidth, bmp.bmHeight,
			bmp.bmPlanes, bmp.bmBitsPixel, bmp.bmWidthBytes, bmp.bmBits);

		int size = bmp.bmWidthBytes * bmp.bmHeight;

		if ( size < 1024 )
			wsprintf(mess+_tcslen(mess), _T(", %d b"), size);
		else if ( size < 1024 * 1024 )
			wsprintf(mess+_tcslen(mess), _T(", %d,%03d b"), size/1024, size%1024);
		else
			wsprintf(mess+_tcslen(mess), _T(", %d,%03d,%03d b"), size/1024/1024, size/1024%1024, size%1024);
	}
	else
		_tcscpy(mess, _T("Failed"));
}

// Search for the largest DDB compatible with a DC
HBITMAP LargestDDB(HDC hDC)
{
	HBITMAP hBmp;

	int mins = 1;			// 1	   pixel
	int maxs = 1024 * 128;	// 16 Giga pixels

	while ( true ) // search for largest DDB
	{
		int mid = (mins + maxs)/2;

		hBmp = CreateCompatibleBitmap(hDC, mid, mid);

		if ( hBmp )
		{
			HBITMAP h = CreateCompatibleBitmap(hDC, mid+1, mid+1);

			if ( h==NULL )
				return hBmp;

			DeleteObject(h);
			DeleteObject(hBmp);

			mins = mid+1;
		}
		else
			maxs = mid;
	}

	return NULL;
}


// Create a monochrome mask bitmap from a source DC
BOOL KDDBMask::Create(HDC hDC, int nX, int nY, int nWidth, int nHeight, UINT crTransparent)
{
	Release();

	RECT rect = { nX, nY, nX + nWidth, nY + nHeight };
	LPtoDP(hDC, (POINT *) & rect, 2);								  
	
	m_nMaskWidth  = abs(rect.right - rect.left);
	m_nMaskHeight = abs(rect.bottom - rect.top);					  // get real size

	m_hMemDC = CreateCompatibleDC(hDC);
	m_hMask  = CreateBitmap(m_nMaskWidth, m_nMaskHeight, 1, 1, NULL); // monochrome bitmap
	m_hOld   = (HBITMAP) SelectObject(m_hMemDC, m_hMask);

	COLORREF oldBk = SetBkColor(hDC, crTransparent);	// map crTransparent to 1, white
	BOOL rslt = StretchBlt(m_hMemDC, 0, 0, m_nMaskWidth, m_nMaskHeight, hDC, nX, nY, nWidth, nHeight, SRCCOPY);
	SetBkColor(hDC, oldBk);

	return rslt;
}
	

BOOL KDDBMask::ApplyMask(HDC hDC, int nX, int nY, int nWidth, int nHeight, DWORD rop)
{
	COLORREF oldFore = SetTextColor(hDC, RGB(0, 0, 0));			// Foreground Black
	COLORREF oldBack = SetBkColor(hDC,   RGB(255, 255, 255));	// Background White

	BOOL rslt = StretchBlt(hDC, nX, nY, nWidth, nHeight, m_hMemDC, 0, 0, m_nMaskWidth, m_nMaskHeight, rop);

	SetTextColor(hDC, oldFore);
	SetBkColor(hDC,   oldBack);

	return rslt;
}


// D=D^S, D=D & Mask, D=D^S	--> if (Mask==1) D else S
BOOL KDDBMask::TransBlt(HDC hdcDest, int nDx0, int nDy0, int nDw, int nDh,
						HDC hdcSrc,  int nSx0, int nSy0, int nSw, int nSh)
{
	StretchBlt(hdcDest, nDx0, nDy0, nDw, nDh, hdcSrc, nSx0, nSy0, nSw, nSh, SRCINVERT);		// D^S
	
	ApplyMask(hdcDest, nDx0, nDy0, nDw, nDh, SRCAND);	// if trans D^S else 0

	return StretchBlt(hdcDest, nDx0, nDy0, nDw, nDh, hdcSrc, nSx0, nSy0, nSw, nSh, SRCINVERT);	// if trans D else S
}


BOOL KDDBMask::TransBlt_FlickFree(HDC hdcDest, int nDx0, int nDy0, int nDw, int nDh,
								  HDC hdcSrc,  int nSx0, int nSy0, int nSw, int nSh)
{
	StretchBlt(hdcSrc, nSx0, nSy0, nSw, nSh, 
		       hdcDest, nDx0, nDy0, nDw, nDh, SRCINVERT); // D^S

	ApplyMask(hdcSrc, nSx0, nSy0, nSw, nSh,	0x220000); // if trans 0 else D^S

	return StretchBlt(hdcDest, nDx0, nDy0, nDw, nDh, 		// if trans D else S
		hdcSrc, nSx0, nSy0, nSw, nSh, SRCINVERT);
}


BOOL G_TransparentBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest,
				    HDC hdcSrc,  int nXOriginSrc,  int nYOriginSrc,  int nWidthSrc,  int nHeightSrc,
					UINT crTransparent)
{
	KDDBMask mask;

	mask.Create(hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc, crTransparent);

	return mask.TransBlt(hdcDest, nXOriginDest, nYOriginDest, nWidthDest, nHeightDest,
				hdcSrc, nXOriginSrc, nYOriginSrc, nWidthSrc, nHeightSrc);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久草中文综合在线| 老司机午夜精品99久久| 亚洲综合色成人| 美女网站在线免费欧美精品| 国产精品综合一区二区三区| 欧美视频一区二区在线观看| 欧美国产精品中文字幕| 欧美aⅴ一区二区三区视频| 成人h动漫精品一区二区| 91麻豆精品国产91久久久使用方法| 久久精品免视看| 蜜桃精品在线观看| 欧美性色欧美a在线播放| 国产精品区一区二区三| 欧美bbbbb| 在线观看91精品国产麻豆| 亚洲视频香蕉人妖| 国产91富婆露脸刺激对白| 欧美一区二区三区白人| 午夜日韩在线观看| 在线观看一区不卡| 一区二区在线观看免费视频播放| 粉嫩aⅴ一区二区三区四区| 日韩精品一区二区三区在线| 秋霞影院一区二区| 在线91免费看| 香蕉影视欧美成人| 欧美日韩国产天堂| 偷拍自拍另类欧美| 欧美日韩一区二区欧美激情| 亚洲欧洲精品一区二区三区不卡 | 亚洲乱码国产乱码精品精98午夜| 国产精品亚洲人在线观看| 精品美女一区二区三区| 久久99精品视频| 精品国产一区二区三区忘忧草 | 天天色综合成人网| 欧美三日本三级三级在线播放| 亚洲四区在线观看| 91啪亚洲精品| 一区二区三区资源| 欧美绝品在线观看成人午夜影视| 午夜精品福利视频网站| 欧美一区三区二区| 国产伦理精品不卡| 欧美国产禁国产网站cc| av在线播放一区二区三区| 亚洲欧美日韩国产另类专区| 欧洲av一区二区嗯嗯嗯啊| 天堂一区二区在线| 日韩美一区二区三区| 国产美女主播视频一区| 欧美国产1区2区| 欧美自拍丝袜亚洲| 午夜精品福利在线| 欧美精品一区二区三区在线 | 亚洲欧洲日产国产综合网| 99re视频精品| 午夜久久久久久电影| 欧美电影免费观看高清完整版在线 | 337p亚洲精品色噜噜狠狠| 精品一区二区三区香蕉蜜桃| 国产拍欧美日韩视频二区| 色婷婷亚洲一区二区三区| 亚洲一区二区三区中文字幕在线| 欧美电影一区二区| 成人一区二区三区在线观看 | 国产一区欧美一区| 亚洲男人的天堂网| 日韩一卡二卡三卡| 99r精品视频| 免费一级欧美片在线观看| 中文字幕日韩一区二区| 欧美一级高清大全免费观看| 成人性生交大片免费看中文| 亚洲mv在线观看| 中文字幕欧美日本乱码一线二线| 欧美性色aⅴ视频一区日韩精品| 国产一区二区在线看| 亚洲永久精品国产| 国产欧美一区二区三区在线看蜜臀 | 国产精品国产三级国产aⅴ中文| 欧美日韩亚洲另类| 国产成人一区在线| 丝袜脚交一区二区| 亚洲色图制服丝袜| 久久亚洲精品国产精品紫薇| 欧洲生活片亚洲生活在线观看| 激情av综合网| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲三级在线观看| 久久久久88色偷偷免费| 欧美剧情片在线观看| 色综合久久久久综合体桃花网| 国产精品一区二区三区四区| 日韩精品色哟哟| 亚洲国产综合人成综合网站| 日本一区二区电影| 久久只精品国产| 欧美一区二区三区四区视频| 在线视频你懂得一区二区三区| 国产成人8x视频一区二区| 九一久久久久久| 美女视频黄免费的久久| 午夜精品久久久久久不卡8050| 亚洲男人电影天堂| 亚洲欧美国产高清| 综合分类小说区另类春色亚洲小说欧美| 日韩三级高清在线| 日韩一区二区三免费高清| 欧美日韩日日摸| 欧美视频你懂的| 欧美亚洲动漫精品| 欧美卡1卡2卡| 7777精品伊人久久久大香线蕉超级流畅 | 欧美精品在线观看一区二区| 99国产精品久久久久久久久久久| 国产乱子伦一区二区三区国色天香 | 最新国产成人在线观看| 久久精品日韩一区二区三区| 精品国产电影一区二区| 精品少妇一区二区三区| 日韩视频一区二区三区在线播放| 欧美精品日日鲁夜夜添| 欧美精品久久99久久在免费线 | 蜜臀91精品一区二区三区| 久久99精品国产91久久来源| 久久国产精品第一页| 狠狠色狠狠色综合| av中文字幕不卡| 在线免费观看日韩欧美| 欧美丰满嫩嫩电影| www一区二区| 亚洲柠檬福利资源导航| 香蕉久久一区二区不卡无毒影院 | 91在线视频播放地址| 5858s免费视频成人| 欧美精品亚洲一区二区在线播放| 欧美精品三级日韩久久| 欧美电视剧在线看免费| 国产亚洲欧美色| 亚洲日本丝袜连裤袜办公室| 午夜视频一区在线观看| 国产揄拍国内精品对白| av中文字幕一区| 制服丝袜在线91| 中文字幕的久久| 午夜久久久久久久久久一区二区| 狠狠色丁香久久婷婷综合_中| 成人午夜电影久久影院| 欧美日产国产精品| 久久精品视频一区二区三区| 亚洲欧美日韩国产另类专区| 九九精品视频在线看| 91在线观看下载| 精品日韩一区二区三区| 亚洲精品亚洲人成人网在线播放| 久久激情综合网| 欧美性生活影院| 国产精品福利电影一区二区三区四区| 亚洲国产成人av好男人在线观看| 国产美女久久久久| 国产麻豆成人精品| 亚洲色图一区二区| 午夜电影网亚洲视频| 国产白丝网站精品污在线入口| 日本丶国产丶欧美色综合| 日韩一区二区三区电影| 亚洲人成精品久久久久久| 精品一二三四在线| 在线观看网站黄不卡| 欧美经典一区二区| 免费xxxx性欧美18vr| 91国在线观看| 欧美国产欧美综合| 激情av综合网| 91精品国产全国免费观看| 尤物视频一区二区| 风流少妇一区二区| 26uuu国产在线精品一区二区| 亚洲第一久久影院| 一本色道久久加勒比精品| 久久噜噜亚洲综合| 久久精工是国产品牌吗| 欧美一区二区三区日韩视频| 亚洲国产精品久久久久秋霞影院 | 欧美精选一区二区| 国产福利不卡视频| 欧美一区欧美二区| 亚洲一区二区视频在线| 日本韩国欧美国产| 亚洲激情图片一区| 色94色欧美sute亚洲线路一ni| 国产精品你懂的在线| 国产精品自在在线| 久久色中文字幕| 国产一区二区三区精品欧美日韩一区二区三区| 欧美三片在线视频观看| 亚洲黄色录像片| 欧美女孩性生活视频|