В чем разница между растровым изображением Windows и DIBSection?

StackOverflow https://stackoverflow.com/questions/8352240

  •  27-10-2019
  •  | 
  •  

Вопрос

Я загружаю DIBSection из файла со следующим:

родовое слово

Эмпирическим путем я обнаружил следующие различия между загруженным растровым изображением и растровыми изображениями, которые я использовал в прошлом, но я не могу найти никакой документации о том, что разница должна быть.

  • Строки упорядочены в памяти сверху вниз, а не снизу вверх. Я убедился, что сам файл .bmp упорядочен снизу вверх.
  • Заполнение строки кратно 2 байтам, а не 4.

Я также обнаружил документально подтвержденное различие при использовании CreateDIBSection чтобы создать DIBSection с нуля.

  • Значения DIBSECTION.dsHandle и BITMAP.bmBits, возвращаемые функцией GetObject, будут NULL.

Где документация по первым двум различиям, и я что-нибудь упустил? Это касается Windows 7, но я не могу себе представить, что в других версиях Windows все будет иначе.

Изменить: некоторые дополнительные сведения. Вот шестнадцатеричный дамп кода temp.bmp; это изображение 7x7 с белой полосой по правой стороне и синими значениями, увеличивающимися по левой стороне (0x10,0x20 и т. д.). Вы можете видеть, что нижняя строка (00,00,70) является первой и что есть 3 байта заполнения.

родовое слово

Вот пример программы для чтения файла .bmp и записи его содержимого. Я удалил проверку ошибок для краткости.

родовое слово

И вот результат работы вышеуказанной программы вместе с шестнадцатеричным дампом созданного файла:

родовое слово
Это было полезно?

Решение

Вызовите GetDIBits вместо GetBitmapBits.Документы для GetBitmapBits ( здесь )указывают, что это возвращает данные для зависящего от устройства растрового изображения, тогда как у вас есть независимое от устройства растровое изображение.Они также указывают, что этот вызов не следует использовать и предназначен только для 16-битной совместимости.Итак, использование GetDIBits должно помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top