1

我在使用一种算法来“展平”PDF 文档中的页面时遇到内存问题。

HBITMAP hbmp = CreateDibSection(...);
ThirdPartyBmpManipulation(hbmp, "C:\\file.pdf", 0); //renders page 0 in file.pdf
void * hdib = ConvertBitmap(hbmp); //copy a Dib Section to a Dib
DeleteObject(hbmp); //frees the HBitmap while the Dib is now in memory

问题是我有一个非常大的位图,在某些情况下,当我分配要复制的 DIB 时,我无法将 HBitmap 保留在内存中。

所以这是一个很长的镜头,但我可以以某种方式在磁盘上分配 Dib 部分并且仍然有一个 HBITMAP 吗?(对我的 ConvertBitmap 函数使用相同的句柄)

4

1 回答 1

1

什么是故障模式?你说“物理内存”:windows使用虚拟内存,它会分页到磁盘,你不需要担心物理内存会超出性能影响。如果您的地址空间不足,使用磁盘可能无法帮助您。

但是,CreateDIBSection可以采用HANDLE到文件映射(使用创建CreateFileMapping)。如果函数的内部和相关的 HBITMAP 函数足够智能,则可以通过利用该功能来避免耗尽您的地址空间。如果它们是“智能的”,它们将MapViewOfFile根据需要将文件的相对较小的“窗口”映射到进程的地址空间中。

于 2011-01-13T18:25:14.880 回答