Преобразование изображения из массива в растровое изображение, смещение не может быть правильно установлено на 54

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

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

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

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

вот пример (см. тень слева): пример трассировки лучей с нежелательной полосой слева

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

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

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

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


person Jonathan strayer    schedule 25.06.2018    source источник
comment
В этом примере кода offset_bits должен быть sizeof(bitmap_file_header) + sizeof(bitmap_image_header). Если используется цветовая палитра, offset_bits также должен включать размер палитры.   -  person Alex F    schedule 25.06.2018
comment
Некоторые программы могут открыть файл .bmp с недопустимым значением offset_bits. Однако это означает, что они неправильно анализируют формат .bmp, вероятно, игнорируя данные палитры. Посмотрите на этот код, он показывает оба случая: с цветовой палитрой и без нее: думать/783914/   -  person Alex F    schedule 25.06.2018
comment
Спасибо за ссылку, буду знать! Для смещения, хотя я пытался присвоить смещению это значение (размер (заголовок файла + заголовок изображения)), кажется, моя функция вместо этого пишет что-то другое...   -  person Jonathan strayer    schedule 25.06.2018