参考文档: http://blog.csdn.net/hnust_xiehonghao/article/details/37652927
http://blog.sina.com.cn/s/blog_4c75bd8c0100zsw7.html
绘制DIB图到到设备,明确一点,DIB设备无关图形向设备CDC上绘的话,肯定是需要经过图形pixel像素转换的,要转换成设备的颜色像素格式。
参考这段说明:
DIB的颜色信息储存在自己的颜色表中,程序一般要根据颜色表为DIB创建逻辑调色板。
在输出一幅DIB之前,程序应该将其逻辑调色板选入到相关的设备上下文中并实现到系统调色板中,然后再调用相关的GDI函数(如::SetDIBitsToDevice或::StretchDIBits)输出DIB。
在输出过程中,GDI函数会把DIB转换成DDB,这项工作主要包括以下两步:
将DIB的颜色格式转换成与输出设备相同的颜色格式。
例如,在真彩色的显示模式下要显示一个256色的DIB,则应该将其转换成24位的颜色格式。
将DIB像素的逻辑颜色索引转换成系统调色板索引。
DIB图形绘制的方法:
1. 通过CImage绘制图形文件(支持png/bmp/jpg/gif等)
对于DIB图形文件,方法比较简单,也比较易用:
已有DIB图形的文件,使用CImage::load加载图形,然后再使用CImage::Draw绘制到设置DC绑定的图形上即可
2. 通过CBitmap加载文件并绘制(仅支持bmp等少量格式)
和CImage类似,CBitmap提供了LoadBitmap方法,加载图形,把一个DIB图形加载成为了一个DDB图形,然后可以用CBitmap::Draw等方法绘制
3. 通过转换为DDB图形,绘图
如果已有内存DIB信息,可以用过CreateDIBitmap函数,把DIB图形结构和数据传入,返回一个DDB的图形HBITMAP
4. 直接把DIB图形绘制到设备中,函数中自带转换
SetDIBitsToDevice或StretchDIBits函数,通过输入DIB图形信息和HDC以及绘制区域等,直接把DIB图形绘到设备CDC上。
原文地址:http://blog.csdn.net/chunyexiyu/article/details/39370557