Нет способа извлечь эту информацию из GDI. Как вы уже обнаружили, BITMAP И BITMAPINFOHEADER поля bmHeight, полученные через GetObject, всегда положительны. Поле bmWidthBytes также является положительным.
Если вы рисуете (или из) DIBSection, используя дескриптор GDI, GDI будет рисовать DIBSection правильным образом вверх. Использование извлеченного BITMAPINFOHEADER приведет к неправильному отображению растровых изображений сверху вниз.
Казалось бы, единственный способ узнать из пользовательского режима - использовать GDI для тестирования - установите в пикселях верхнего левого и нижнего левого пикселей растрового изображения два разных значения, затем прочитайте буфер, чтобы увидеть, какая запись находится в первом месте памяти .
На самом деле лучший вариант - встроить в свой API - когда вы передаете DIBSection как HBITMAP, убедитесь, что по крайней мере bool fIsDibSectionTopDown передан или сохранен.