我现在想从一个HDC中获取到当前这里面存储的图像数据的指针,以便能够拷贝或编辑这些数据,现在我的做法是,先使用CreateDIBSection 创建一个与设备无关的位图,返回一个HBITMAP型的bmp,并且这样可以得到一个数据指针,然后使用SelectObject装载这个返回的bmp,然后使用BitBlt拷贝我想得到的HDC的内容,这样我就得到了希望获得的HDC中的数据,只不过不是直接得到的,而是得到的一个拷贝。
现在的问题是,如果按照我上面的方法来做,在BitBlt的时候消耗的时间会很长,测试了一下,如果拷贝256*256大小的区域,大约需要20-25毫秒,而一般情况下我们再使用BitBlt的时候,拷贝同样大的应该消耗的时间在3毫秒以下。看了下MSDN中BitBlt函数的介绍,说:如果源和目标设备环境的颜色格式不匹配,那么BitBlt函数将源场景的颜色格式转换成能与目标格式匹配的格式。根据这个我猜测应该是这个颜色格式不匹配,所以需要转换格式,所以慢了,如果我的推断正确,那么在使用CreateDIBSection 的时候能不能够创建一个与我当前设备颜色格式匹配的位图呢?如果我的推断不真确,那么又是什么原因导致了速度变慢呢?
还有就是能不能有别的方法可以从一个HDC中直接或间接得到图像数据的指针?
或者有没有什么方法能够创建一个与设备相关的位图,并且能获取到其数据指针?
可以的,这个问题比较普遍
参见[url=http://topic.eeworld.net/u/20091119/15/fe35165e-70a1-433a-9631-a9c5b930641c.html][/url]
wceui和Reallyu的回复