在windows的bitblt函数主要是用于windows贴图操作,也就是将一个设备上的一般是内存设备函数贴图到真实的设备上啊
在此处又注意到的是bitblt函数却存在两种形式
1,这是在cdc函数类中的一个成员函数
下面是来自百度百科的一段介绍
CDC类定义的是设备上下文对象的类。
CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。
通过CDC对象的成员函数进行所有的绘图。
它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。
另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。
使用CDC对象时要构造它,然后调用与它平等的、使用设备上下文的Windows函数的成员函数。
注意:
Windows 95下所有屏幕坐标限制在16位以内。因此向CDC成员函数传递的int必须在-32768至32767之间。
Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 。MFC基础类库定义了设备环境对象类----CDC类。
而bitblt只是cdc类中的一个成员函数,所以这个函数的调用一定是
类名.
BitBlt(。。。。)
下面是一个简单的函数原型解释,这里注意他与第二种bitblt函数的参数是不同的
BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
x:目标矩形区域的左上角x轴坐标点。
y:目标矩形区域的左上角y轴坐标点。
nWidth:在目标设备中绘制位图的宽度。
nHight:在目标设备中绘制位图的高度。
pSrcDC:源设备上下文对象指针。
xSrc:源设备上下文的起点x轴坐标,函数从该起点复制位图到目标设备。
ySrc:源设备上下文的起点y轴坐标,函数从该起点复制位图到目标设备。
dwRop:光栅操作代码
下面是抄来自于的一段代码http://blog.csdn.net/yes_life/article/details/6754485
void DrawFairy(CDC *pDC, int x, int y) // pDC为窗口DC指针
{
CDC dcFairy;
CDC dcMask;
dcFairy.CreateCompatibleDC(pDC);
dcMask.CreateCompatibleDC(pDC);
CBitmap *pMask=dcMask.SelectObject(&m_bmMask); // m_bmMask为精灵掩膜图
CBitmap *pFairy=dcFairy.SelectObject(&m_bmFairy); // m_bmFairy为精灵图片
// 得到精灵图片的大小
BITMAP bm;
m_bmFairy.GetObject(sizeof(bm),&bm);
// 处理精灵图片
dcFairy.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMask,0,0,MERGEPAINT);
// 处理背景图片(用来贴精灵图片的那一部分)
pDC-> BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcMask,0,0,NOTSRCERASE);
// 将处理过的精灵图片与背景经过处理的部分 "异或 "起来
pDC-> BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcFairy,0,0,SRCINVERT);
// Release
dcMask.SelectObject(pMask);
dcFairy.SelectObject(pFairy);
}
{
CDC dcFairy;
CDC dcMask;
dcFairy.CreateCompatibleDC(pDC);
dcMask.CreateCompatibleDC(pDC);
CBitmap *pMask=dcMask.SelectObject(&m_bmMask); // m_bmMask为精灵掩膜图
CBitmap *pFairy=dcFairy.SelectObject(&m_bmFairy); // m_bmFairy为精灵图片
// 得到精灵图片的大小
BITMAP bm;
m_bmFairy.GetObject(sizeof(bm),&bm);
// 处理精灵图片
dcFairy.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcMask,0,0,MERGEPAINT);
// 处理背景图片(用来贴精灵图片的那一部分)
pDC-> BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcMask,0,0,NOTSRCERASE);
// 将处理过的精灵图片与背景经过处理的部分 "异或 "起来
pDC-> BitBlt(x,y,bm.bmWidth,bm.bmHeight,&dcFairy,0,0,SRCINVERT);
// Release
dcMask.SelectObject(pMask);
dcFairy.SelectObject(pFairy);
}
这里我们要注意的是bitblt的函数是以成员函数的形式去调用的呃pDC-> BitBlt
2.gdi函数,这里的bitblt是直接的函数所以他不会跟上述成员函数一样,在定义类的时候就默认类中定义的设备就是目标设备所以此处我们的函数是不同于上述的,在参数里面就多了一个目标设备。
BOOL BitBlt( _In_ HDC hdcDest, _In_ int nXDest, _In_ int nYDest, _In_ int nWidth, _In_ int nHeight, _In_ HDC hdcSrc, _In_ int nXSrc, _In_ int nYSrc, _In_ DWORD dwRop );
case WM_PAINT:
{
PAINTSTRUCT ps;
hDC = BeginPaint( Wnd, &ps );
dcID = SaveDC(hDC);
hDCMem = CreateCompatibleDC(hDC);
hOldBitmap = (HBITMAP) SelectObject(hDCMem, hBitmapa);
GetObject(hBitmapa, sizeof(bmInfo), &bmInfo);
if(CzyMaskowac)
{
SelectObject(hDCMem, hMaska);
BitBlt(hDC, BitmapPos.x, BitmapPos.y, bmInfo.bmWidth, bmInfo.bmHeight, hDCMem, 0, 0, SRCAND);
SelectObject(hDCMem, hBitmapa);
BitBlt(hDC, BitmapPos.x, BitmapPos.y, bmInfo.bmWidth, bmInfo.bmHeight, hDCMem, 0, 0, SRCPAINT);
}
if(!CzyMaskowac)
BitBlt(hDC, BitmapPos.x, BitmapPos.y, bmInfo.bmWidth, bmInfo.bmHeight, hDCMem, 0, 0, SRCCOPY);
SelectObject(hDCMem, hOldBitmap);
RestoreDC(hDC, dcID);
EndPaint( Wnd, &ps );
}break;
{
PAINTSTRUCT ps;
hDC = BeginPaint( Wnd, &ps );
dcID = SaveDC(hDC);
hDCMem = CreateCompatibleDC(hDC);
hOldBitmap = (HBITMAP) SelectObject(hDCMem, hBitmapa);
GetObject(hBitmapa, sizeof(bmInfo), &bmInfo);
if(CzyMaskowac)
{
SelectObject(hDCMem, hMaska);
BitBlt(hDC, BitmapPos.x, BitmapPos.y, bmInfo.bmWidth, bmInfo.bmHeight, hDCMem, 0, 0, SRCAND);
SelectObject(hDCMem, hBitmapa);
BitBlt(hDC, BitmapPos.x, BitmapPos.y, bmInfo.bmWidth, bmInfo.bmHeight, hDCMem, 0, 0, SRCPAINT);
}
if(!CzyMaskowac)
BitBlt(hDC, BitmapPos.x, BitmapPos.y, bmInfo.bmWidth, bmInfo.bmHeight, hDCMem, 0, 0, SRCCOPY);
SelectObject(hDCMem, hOldBitmap);
RestoreDC(hDC, dcID);
EndPaint( Wnd, &ps );
}break;