Преобразование изображения из массива в растровое изображение, смещение не может быть правильно установлено на 54 - PullRequest
0 голосов
/ 25 июня 2018

Я использую MiniLibX для школьного проекта Raytracer. Я хочу сделать снимки моего Raytracer и сохранить их в растровых файлах ".bmp".

Я следую очень полезному руководству, которое нашел в сети: http://ricardolovelace.com/creating-bitmap-images-with-c-on-windows.html

Кажется, все работает нормально, за исключением настройки смещения.

Если в заголовке указать значение 0, первые 18 пикселей изображения будут случайными, и я получу полосу с правой стороны слева (шириной 18 пикселей). Если я установлю смещение в 54 байта (правильное количество байтов, которое должно быть смещено), файл поврежден (никакое программное обеспечение не откроет его).

вот пример (см. Тень слева): Пример raytracer с нежелательной полосой слева

Итак, я нашел другой ресурс, который поможет мне распечатать фактический заголовок, который был записан в файле, и проверить наличие ошибок (см. https://gist.github.com/j-marjanovic/5319384ad6606d6fd6d6).. Я обнаружил, что если я установлю смещение равным 1, битовая карта записывает смещение 65536, когда я установил его на 54, это дает мне 65536 * 54.

Я заблудился из-за того, что могло бы радикально изменить смещение, которое я записываю в такое огромное значение, и мне любопытно узнать, как растровые изображения читаются различными программами. Я прочитал много тем о переполнении стека и в Интернете, но не смог найти именно эту проблему. Это сообщение напоминает это, но источник проблемы мне кажется другим (я не могу связать с моей проблемой): Directshow & .Net - Растровое изображение показывает полосу справа на левой стороне изображения?

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

В любом случае, если вы захотите взглянуть на мой код, я его выложу и благодарю за любые подсказки, которые могут у вас возникнуть по этому вопросу!

...