gpt4 book ai didi

c++ - CreateDibSection 在磁盘上而不是物理内存上

转载 作者:太空宇宙 更新时间:2023-11-04 12:21:37 57 4
gpt4 key购买 nike

我在使用“拼合”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 函数使用相同的句柄)

最佳答案

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

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

关于c++ - CreateDibSection 在磁盘上而不是物理内存上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682886/

57 4 0
文章推荐: html - 如何防止
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com