Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在引擎盖下的第一部分_C++_Winapi_Createdibsection - Fatal编程技术网

C++ 在引擎盖下的第一部分

C++ 在引擎盖下的第一部分,c++,winapi,createdibsection,C++,Winapi,Createdibsection,我一直在使用WINAPI CreateDIBSection()逐像素地绘制,然后将位图转换为DC。我很好奇。CreateDIBSection的底层数据结构发生了什么变化?BITMAPINFO结构存储屏幕/客户端的宽度和高度。然后VOID**ppvBits处理24位颜色。那么,这一切可以看作是一个3D阵列吗?与此类似 整数像素[高度][宽度][颜色] 我问这个问题的原因是这个CreateDIBSection()函数非常快,但是如果我创建一个类似的数组(900*1800*(246*256*256))

我一直在使用
WINAPI CreateDIBSection()
逐像素地绘制,然后将位图转换为DC。我很好奇。CreateDIBSection的底层数据结构发生了什么变化?BITMAPINFO结构存储屏幕/客户端的宽度和高度。然后VOID**ppvBits处理24位颜色。那么,这一切可以看作是一个3D阵列吗?与此类似

整数像素[高度][宽度][颜色]

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

微软是如何快速高效地获得这种方法的?我什么都试过了。Int***指针指向指向指针的指针,
Int***malloc
,尝试了
NEW
等,它们在大型数组上都非常慢。我只是想知道如何构建一个性能同样好的3D阵列。有什么想法吗

我需要一个大约20000x1800x100000的阵列
CreateDIBSection()
快速存储,不会出现任何问题。但是一个标准的C/C++动态数组怎么样


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

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

row = index / width;
column = index % width;
对于24位颜色,dib的大小为
width*height*3字节
(每种颜色一个字节)。当它加载到内存中时,它会被填充到4个字节(整数的大小)

您可以使用直接访问位


另请参见:

你到底在说什么“真的很慢”?分配?以某种方式使用内存?除了在某些特殊情况下(如DirectX从视频复制到系统RAM),内存通常是内存-无论是通过
CreateDIBSection
还是通过
malloc
分配。您分配的内存太多了。类似的数组将是900*1800*3,因为对于每个像素,您有3个字节(如果您有alpha,则为4个字节,加上每行末尾的一些字节以进行对齐)。它不是一个3D数组,而是一个2D颜色值数组。