Skip to content

BMP картинка палитры

HarpyWar edited this page Oct 23, 2014 · 5 revisions

В некоторых картах встречается некорректная bmp палитра. Она открывается через редактор карт Radiant, но после экспорта в bmp файл картинка не откроется ни одним редактором изображений, либо будет показано смещенное изображение с неправильными цветами.

Изучая формат BMP были найдены следующие моменты (на примере карты tourney0):

  • По смещению 0x02 неходится размер всего файла в байтах (0x01D636)
  • По смещению 0x0A неходится количество байтов от начала файла до начала самой картинки (0x0836), это заголовок (54 байта) + мусор (дополнительные данные?)
  • По смещению 0x0E находится размер BitmapInfoHeader. Если он равен 12 байтам, то ничего делать не нужно - это файл формата BMP Version 2. Там значения Width и Height имеют тип Short и занимают по 2 байта, а не по 4 (палитра в таком формате есть в карте castle-ctf)
  • По смещению 0x22 находится количество байт, которое занимает только сама картинка в этом файле (0x01CE00)

Фишка в том, что в этой картинке числа по смещению 0x02 и 0x0A почему-то неверные! Первое должно быть = 0x01D236 (размер файла), а второе 0x01D236 - 0x01CE00 = 0x0436. Delphi их игнорирует, поэтому и показывает картинку нормально.

Чтобы исправить эту картинку, необходимо поменять 8 на 4 по смещению 0X0B, и она станет нормально открываться. Желательно заменить ещё и неправильный размер файла в позиции 0x02.