Что мне нужно сделать, чтобы преобразовать DIB в BMP?
Документация по типам растровых заголовков: http://msdn.microsoft.com/en-us/library/dd183386%28VS.85%29.aspx.
В коде разница между bmp-файлом и представлением памяти dib заключается в наличии структуры BITMAPFILEHEADER в начале (http://msdn.microsoft.com/en-us/library/dd183374(v=vs.85).aspx). Так что буквальный ответ для преобразования bmp в dib состоит в том, чтобы пропустить BITMAPFILEHEADER и начать с адресом памяти заголовка DIB (сразу после заголовка файла растрового изображения), который всегда находится на 14 байтов после начала адреса памяти bmp.
BITMAPFILEHEADER *bmp = ...; char * bmpBytes = reinterpret_cast<char *>(bmp); void * myDib = (void *)bmpBytes + BMP_HEADER_LENGTH; /* (14 bytes) */ /* cast and do something with myDib */ ...
НТН
Проверьте API GdipCreateBitmapFromGdiDib
Пример: http://www.codeproject.com/KB/GDI-plus/DIBtoBitmap.aspx
Функция преобразования Imagemagick сделает это (и многие другие преобразования) для вас в командной строке. Бесплатный, открытый исходный код, доступный на всех основных платформах. Это отличная программа, которая должна быть в любом наборе инструментов.