您的位置:首页 > 其它

bitblt函数的注意事项

2013-11-23 23:14 281 查看
在windows的bitblt函数主要是用于windows贴图操作,也就是将一个设备上的一般是内存设备函数贴图到真实的设备上啊

在此处又注意到的是bitblt函数却存在两种形式

1,这是在cdc函数类中的一个成员函数

下面是来自百度百科的一段介绍

CDC类定义的是设备上下文对象的类。

CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。

通过CDC对象的成员函数进行所有的绘图。

类对设备上下文操作提供了成员函数,处理绘图工具。安全型图形设备接口(GDI)对象收集,以及处理颜色和调色板

它还为获取和设置绘图属性、映射,处理视点、窗口扩展、转换坐标,处理区域、剪贴、绘制直线及绘制简单椭圆和多边形等形状提供了成员函数。

另外还为绘制文本、处理字体,使用打印机跳转,滚动和播放元文件提供成员函数。

使用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); 

这里我们要注意的是bitblt的函数是以成员函数的形式去调用的呃pDC->
BitBlt
2.gdi函数,这里的bitblt是直接的函数所以他不会跟上述成员函数一样,在定义类的时候就默认类中定义的设备就是目标设备所以此处我们的函数是不同于上述的,在参数里面就多了一个目标设备。
下面是来自msdn的一个定义http://msdn.microsoft.com/en-us/library/windows/desktop/dd183370(v=vs.85).aspx

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
);


下面是来自msdn的一段函数
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; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: