c - 将 HGLOBAL DIB 数据写入文件时遇到问题

标签 c winapi gdi

我正在使用一个捕获卡 dll,它导出一个提供包含 DIB 的 HGLOBAL 句柄的函数。我想把这个DIB写入一个文件。锁定资源并检索数据指针后,我请求大小,大约为 1mb。但当我将它写入文件时,它始终是 0 字节。这是我第一次使用 HGLOBAL 类型,所以我猜我做错了什么。感谢您的帮助。

char* dibData = (char*)LockResource(DIB);
if(NULL != dibData)
{
    SIZE_T dibSize = GlobalSize (DIB);
    f = fopen("thedib.dib", "wb");

    if (f)
    {
        n = fwrite(dibData,dibSize,1,f);
        fflush(f);
        fclose(f);
        wrote = true;
    }

    UnlockResource(DIB);
}

最佳答案

您似乎混合了资源 API 和全局内存 API。如果确实是资源,则使用LockResource()、SizeofResource()、UnlockResource()。如果只是通过GlobalAlloc()分配的内存块,则使用GlobalLock()、GlobalSize()、GlobalUnlock()。

此外,.bmp 文件应以 BITMAPFILEHEADER 结构开头。内存中 DIB 不存在此结构,因此您需要在写入 DIB 数据之前写入该结构。

http://msdn.microsoft.com/en-us/library/dd183374%28v=vs.85%29.aspx

关于c - 将 HGLOBAL DIB 数据写入文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7882848/

相关文章:

C 错误 : dereferencing pointer to incomplete type linked list

c++ - MFC中如何显示指针的值?

windows - 有什么工具可以将 32 位/64 位可执行文件打包在一起吗?

c++ - 使用 GDI 在我的窗口周围绘制边框不起作用?

c - 如何将 Eclipse 项目与 "floor"和 "pow"函数的 -lm 库链接?

c - 使用结构和指针数组时出错 : incompatible types in assignment

c - 识别子进程的子进程?

c - 使用 C 中的 RegCopyTree 拒绝访问

php - 使用 php 代码的缩略图生成器,以便截取网页的屏幕截图

c - 在 GDI 中绘制文本并使其适合矩形?