我一直在使用WINAPI CreateDIBSection()
逐个像素地绘制然后我bitblt到DC。我很好奇。 CreateDIBSection的底层数据结构发生了什么? BITMAPINFO结构存储屏幕/客户端的宽度高度。然后VOID ** ppvBits处理24位颜色。所有这些都可以看作3D阵列吗?与此相似
int pixels [height] [width] [color] ?
我问的原因是这个CreateDIBSection()
函数非常快,但是如果我创建一个类似的数组(900 * 1800 *(246 * 256 * 256)),那真的很慢。
Microsoft如何快速有效地使用此方法?我已经尝试了一切。 Int ***指针指向指针int*** malloc
,尝试NEW
等,它们在大型数组上都非常慢。我只是好奇我如何构建一个同样表现的3D数组。有什么想法吗?
我需要一个大约20000x1800x100000的阵列。 CreateDIBSection()
快速存储,没有任何问题。但是标准的C / C ++动态数组呢?
我需要在第二个数组中存储CreateDIBSection()
和BITMAPINFO
中的内容。
答案 0 :(得分:1)
它不使用三维数组。它只需要一维的颜色数组。您可以从索引中获取X
和Y
坐标,并了解位图的宽度。
row = index / width;
column = index % width;
对于24位颜色,dib的大小为width * height * 3 bytes
(每种颜色一个字节)。当它被加载到内存中时,它会被填充到4个字节(整数大小)。
您可以使用GetDibBits直接访问位
另请参阅:bitmap format