- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在使用“拼合”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/
我在使用“拼合”PDF 文档中的页面的算法时遇到内存问题。 HBITMAP hbmp = CreateDibSection(...); ThirdPartyBmpManipulation(hbmp,
BITMAPINFO bmi; memset(&bmi,0,sizeof(BITMAPINFO)); bmi.bmiHeader.biSize = sizeof(BITMAPIN
更新: 感谢 Denis Anisimov,我通过替换解决了我的问题: for (int i = 0; i 254)?255:((RValue 254)?255:((GValue 254)?25
您好我试图捕获屏幕截图,但图像出来损坏,任何人都可以看到代码有什么问题,基本上我试图使用createdibsection以便我可以直接访问这些位。 这就是结果图片 http://oi47.tinypi
我有一个彩色图像,行数为 479,列数为 638。我正在尝试将此图像保存为 BMP 文件。为此,我首先使用 CreateDIBSection,然后使用 CreateDIBitmap。对于CreateD
我以编程方式截取了屏幕截图,我想将 BGRA 写入文件。 BGRA 保存在 pixelBuffer 中。 这是我用来写入文件的代码: BYTE *pixelBuffer; HBITMA
我正在使用 CreateDIBSection() 从缓冲区创建 HBITMAP,但有时 - 没有经常发生 - 我从中得到一个 NULL 指针。我不明白什么可能导致函数返回 NULL 指针,因为 - 正
从我读到的 here似乎大多数 Windows GDI 功能都被加速了。因此,例如对 BitBlt 或 AlphaBlend 的调用使用硬件加速(如果可用)。它还提到窗口的内容仅保存在视频内存中。现在
我在客户区有一个透明背景的应用程序,它被绘制成黑色,因为窗口没有分层。在每个 WM_PAINT 消息中,我对内存 DC 执行 BitBlt,之后我将内存 DC 与 UpdateLayeredWindo
每当我的应用程序尝试通过调用 CreateDIBSection() 或使用 LR_CREATEDIBSECTION 标志调用 LoadImage() 来创建 DIB 部分时,它似乎都会成功返回。它返回
我目前正在使用我发现的以下代码的修改版本 here尝试将我项目中的 .png 资源转换为 HBITMAP,然后转换为 cv::Map。 cv::Mat Resource2mat(const HMODU
这个问题在这里已经有了答案: Save HBITMAP to *.bmp file using only Win32 (5 个答案) 关闭 8 年前。 我有以下代码。我想使用此信息创建一个 .bmp
我是一名优秀的程序员,十分优秀!