无法将HGLOBAL DIB数据写入文件

时间:2011-10-24 22:45:44

标签: 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);
}

1 个答案:

答案 0 :(得分:3)

您似乎在混合资源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