Я использую 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 показывает полосу справа налево на изображении?
Мое единственное предположение, что это может быть связано с таблицей цветов, но я не уверен, что понимаю, когда это необходимо.
В любом случае, если вы хотите взглянуть на мой код, я загружу его, и спасибо за любые наводки, которые могут быть у вас по этому вопросу!
sizeof(bitmap_file_header) + sizeof(bitmap_image_header)
. Если используется цветовая палитра, offset_bits также должен включать размер палитры. - person Alex F   schedule 25.06.2018