CreateCompatibleBitmap 的使用
来源:互联网 发布:xp系统mac地址怎么查 编辑:程序博客网 时间:2024/06/04 18:07
函数功能:该函数创建与指定的设备环境相关的设备兼容的位图。
函数原型:HBITMAP CreateCompatibleBitmap(HDC hdc,int nWidth,int nHeight);
参数:
hdc:设备环境句柄。
nWidth:指定位图的宽度,单位为像素。
nHeight:指定位图的高度,单位为像素。
返回值:如果函数执行成功,那么返回值是位图的句柄;如果函数执行失败,那么返回值为NULL。若想获取更多错误信息,请调用GetLastError。
备注:由CreateCompatibleBitmap函数创建的位图的颜色格式与由参数hdc标识的设备的颜色格式匹配。该位图可以选入任意一个与原设备兼容的内存设备环境中。由于内存设备环境允许彩色和单色两种位图。因此当指定的设备环境是内存设备环境时,由CreateCompatibleBitmap函数返回的位图格式不一定相同。然而为非内存设备环境创建的兼容位图通常拥有相同的颜色格式,并且使用与指定的设备环境一样的色彩调色板。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;库文件:gdi32.lib。
PS:需要与CreateCompatibleDC配合使用
物理HDC 设备底层会拥有显存等资源,但是兼容DC并没有给图像像素提供内存空间,因此兼容DC总是和BITMAP配合使用,这样一来,兼容DC就利用BITMAP的图像像素数据空间给自己提供类似于显存的内存空间.
这样有很多好处,以来我们可以在加载图片后,在图片上利用DC的各种绘图功能.请看如下示例:
兼容DC在建立之初,只有1*1像素的尺寸,SelectObject选择bitmap以后才可以进行绘图.
内存DC的可见区域是简单的区域,不像物理DC可见区域可能被其他窗口覆盖而产生复杂的可见区域.由于DC的任何绘图都需要考虑在可见区域内绘图,绝对不能超出可见区域的范围.因此每个GDI绘图输出最终都需要和构成复杂可见区域的每一个巨型区域进行剪裁输出,因此物理DC的绘图效果会比兼容DC速度慢一些.这也就是我们经常用兼容DC进行双缓存输出的一个原因
HDC hdc=GetDC(hwnd);
HDC memdc=CreateCompatibleDC(hdc);
RECT rc;
BITMAP bmp;
HBITMAP holdbmp,hbmp=LoadBitmap(hInstDVBRes,MAKEINTRESOURCE(IDB_CLOCK));//从资源加载位图
holdbmp=(HBITMAP)SelectObject(memdc,hbmp);//这里把hbmp的位图选择到兼容DC memdc,之后这个兼容DC就拥有和
//hbmp同样大小的绘图区域,注意超出位图返回的GDI输出都是无效的.
GetObject(hbmp,sizeof(BITMAP),&bmp);//这里获取位图的大小信息,事实上也是兼容DC绘图输出的范围
SetRect(&rc,0,0,bmp.bmWidth,bmp.bmHeight);
DrawText(memdc,"Center Line Text" -1,&rc,DT_VCENTER|DT_SINGLELINE|DT_CENTER);//在兼容DC中间位置输出字符串
//这样以来我们就相当于把hbmp这个位图加上了文字标注,我们可以把这个增加了文字标注的位图保存起来.一个简单的图像处理基本就OK了.
SelectObject(memdc,holdbmp);//复原兼容DC数据.
DeleteDC(memdc);
***********************************************************
首先现象是这样的:
——————————————————————————
在Create之前,都有类似如下的代码:
- CreateCompatibleBitmap 的使用
- 详解CreateCompatibleBitmap 的使用
- 使用CreateCompatibleBitmap多次后出现内存不足的解决方法
- CreateCompatibleBitmap的用处
- CreateCompatibleBitmap
- 依赖于设备的位图(DDB) ,CreateCompatibleBitmap用法
- 关于CreateCompatibleBitmap创建位图失败的解决方法
- 依赖于设备的位图(DDB) ,CreateCompatibleBitmap用法
- CreateCompatibleBitmap返回错误码8的原因及解决方案
- MFC 把通过CreateCompatibleBitmap创建的HBITMAP 填充白色
- 什么是DC,以及CreateCompatibleDC,CreateCompatibleBitmap,SelectObject的作用
- 解决用CreateCompatibleBitmap()创建兼容位图出现的黑底问题
- CreateCompatibleBitmap failing
- CreateCompatibleBitmap的GetLastError返回错误码8的原因及解决方案
- wince6.0 兼容位图CreateCompatibleBitmap和非兼容位图CreateDIBSection的区别
- 调用CreateCompatibleBitmap建立内存DC只有两种颜色的问题
- MFC在调用函数CreateCompatibleBitmap不小心时可能引起的问题
- CreateCompatibleDC CreateCompatibleBitmap SelectObject详解
- python网络爬虫
- struts2的各种视图转发类型:redirect,redirectAction,plainText和字符编码类URLEncoder和URLDecoder的使用
- jquery.validate 自定义错误消息的显示方式--4
- C#和java的Md5结果一致性算法
- DX11可以完美兼容于DX10显卡
- CreateCompatibleBitmap 的使用
- Android学习札记26:深入理解Android中的消息处理机制——Thread、Looper、MessageQueue和Handler(1)
- 在预先定义的内存位置构造一个对象
- 关于浏览器内核的一些小知识,明明白白选浏览器!
- DX11技术访谈:全面支持DX10显卡和Vista
- 在DedeCMS中如何加入微博秀
- 百度贴吧爬虫
- 手机视频监控系统
- SQL数据库 "TRUNCATE TABLE" "DELETE FROM TABLE" 的区别