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
下面是来自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;
在此处又注意到的是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;
相关文章推荐
- C++中缀表达式转换后缀表达式
- 框架中的子页面实现整个页面跳转
- graphviz 开发库的一些资料
- ubuntu下安装和配置java开发环境
- Java基础之一组有用的类——使用公历日历(TryCalendar)
- POJ 2486 Apple Tree
- Servlet的生命周期
- oracle 直接复制表内容到新表
- 一个HttpWebRequest工具类
- 伟大的OO思想
- Windows Server 2008 R2 的操作主控
- Sublime Text3常用快捷键
- 第一篇博客
- 嵌入式bootloader开发之十一-------裸机程序LED开发(Tiny 6410)
- java继承 子类重写父类方法
- 编译openfire3.8.2源码
- Web安全之XSS
- HDU1030 DFS&&规律
- poj3750 大大水题 双向循环链表
- 整数版计算器