首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引擎盖下的CreateDIBSection

引擎盖下的CreateDIBSection
EN

Stack Overflow用户
提问于 2015-07-07 20:01:25
回答 1查看 1.2K关注 0票数 0

我一直在用WINAPI CreateDIBSection()逐个像素绘制,然后再转到DC。我很好奇。CreateDIBSection的底层数据结构是怎么回事?BITMAPINFO结构存储屏幕/客户端的宽度高度。然后,VOID **ppvBits处理24位颜色。所以,这一切都能被看作是一个三维数组吗?类似于此

int像素颜色

我问的原因是这个CreateDIBSection()函数非常快,但是如果我创建一个类似的数组(900*1800*(246*256*256)),它真的很慢。

微软是如何如此快速、高效地获得这一方法的?我什么都试过了。Int*指向指针的指针,int*** malloc,尝试NEW等等,它们在大数组上都非常慢。我只是好奇如何构造一个3D数组来执行。有什么想法吗?

我需要一个大约20000x1800x100000的数组。CreateDIBSection()迅速地存储这些数据,没有任何问题。但是标准的C/C++动态数组怎么样?

我需要将CreateDIBSection()BITMAPINFO中的内容存储在第二个数组中。

EN

回答 1

Stack Overflow用户

发布于 2015-07-07 20:24:28

它不使用三维数组。它只需要一个一维的颜色数组。您可以从索引中获取XY坐标,并知道位图的宽度。

代码语言:javascript
复制
row = index / width;
column = index % width;

对于24位颜色,dib的大小是width * height * 3 bytes (每种颜色有一个字节)。当它加载到内存中时,它会被填充到4个字节(整数的大小)。

您可以使用GetDibBits直接访问位。

另见:位图格式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31278215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档