Возникли проблемы при записи данных HGLOBAL DIB в файл - PullRequest
2 голосов
/ 25 октября 2011

Я использую dll карты захвата, которая экспортирует функцию, предоставляющую дескриптор HGLOBAL, содержащий DIB.Я хочу записать этот DIB в файл.После того, как я заблокирую ресурс и получу указатель данных, я запрашиваю размер, и он составляет около 1 МБ.Но когда я записываю его в файл, это всегда 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 Ответ

3 голосов
/ 25 октября 2011

Похоже, вы смешиваете 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

...