设置 | 登录 | 注册

目前共有13篇帖子。

【解决方案】SetPixel函数绘制速度太慢

11楼 巨大八爪鱼 2016-6-25 16:21
方案1其实就是普通的使用双缓冲技术的代码,只不过创建CompatibleBitmap(也称DDB)后不是用GDI函数来绘图,而是把绘制好的DIB位图数据转换成DDB后放进去。
12楼 巨大八爪鱼 2016-6-25 16:22
至于方案2,要特别注意CreateDIBitmap函数,这个函数名字没取好,应该叫CreateBitmapFromDIB或CreateDIBGeneratedBitmap差不多。因为这个函数最终创建的是DDB,根本就不是DIB。
13楼 巨大八爪鱼 2016-6-25 16:34
SetDIBits是把DIB转换为DDB,
与之相反的是GetDIBits函数,该函数将DDB转换为DIB,具体用法请参考:
https://zh.arslanbar.net/post.php?t=24202
屏幕截图的时候就要将屏幕上的DDB转换为DIB,然后写入文件。因为位图文件始终保存的是与设备无关的位图。

一般情况下HBITMAP句柄指向的位图都是DDB位图。
至于CreateDIBSection函数,则是系统自动完成了DDB和DIB的相互转换,因为创建DIBSection的时候就指定了hdc,系统当然就知道DDB是什么格式的。更新了DIB数组中的数据后,再调用GDI函数,系统会自动将DIB转换为DDB(HBITMAP那边)供GDI使用。当用GDI函数绘完图后,调用GDIFlush函数刷完成GDI的所有操作后,要想看DIB数组中的数据,系统又自动把DDB转换回DIB,达到两边同步的目的。这就是DIB"Section”的作用,它终究只是一个Section。

理论上来说DIB是不需要对应hdc的,因为是“设备无关”的位图。(方案4可体现)
凡是跟hdc扯上关系了的那肯定就是DDB位图,因为是“设备相关”的位图。

内容转换:

回复帖子
内容:
用户名: 您目前是匿名发表。
验证码:
看不清?换一张
©2010-2025 Purasbar Ver3.0 [手机版] [桌面版]
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。