Top-Down vs. Bottom-Up DIBs

来源:互联网 发布:电子作业指导 软件 编辑:程序博客网 时间:2024/06/07 18:19

Top-Down vs. Bottom-Up DIBs

摘自MSDN翻译

如果你是刚刚接触图形编程的人员,可能会认为一个位图是一行一行从顶往底按顺序保存在内存地址中。然而,不是所有的位图都是用如此方式来保存。在Windows系统中,DIB位图有两种不同方向的保存方式:Top-Down 和Bottom-Up。
对于Bottom-Up位图,在内存中是从位图的底部行开始保存,然后一行接着一行,直到位图顶部,所以顶部是保存在内存空间的结束。因而,图像的左下角像素点保存在内存空间的开始处。在GDI中,所有的位图都是Bottom-Up类型的位图。在物理内存中的Bottom-Up位图保存示意图如下所示,

5*6 ARGB 32位位图
图1 5*6 ARGB 32位位图

说明:在实际应用中,unused的大小是不固定的,它取决于图像硬件或一些其他因素。在某些情况下,这个值可能是0。
实际图像
图2 位图在内存中实际保存样式,它是倒立的

对于Top-Down位图,它在内存中的保存顺序是相反的。位图的顶部行保存在内存空间的开始处,然后一行接着一行,底部行保存在内存空间的结尾处。因而,图像的左上角保存在内存空间的开始处。DirectDraw编程采用是Top-Down类型位图。在物理内存中的Top-Down位图保存示意图如下所示,
Top-Down
图3 Top-Down位图

这里写图片描述
图4 位图在内存中实际保存样式,它是正立的

这是代表两种不同的图片压缩方法,可以在位图结构体中设置, 例如 BITMAPINFOHEADER参数中biHeight成员设置为TRUE,则表示Bottom-Up类型,反之为Top-Down类型。