Формат данных BMP (bitmap). Данные изображения BMP

Итак, вышел Creation Kit, и, несмотря на дополнительное время разработки и обещания Bethesda, редактор оказался откровенно не доделанным.
Большим упущением среди всего списка оказался сломанный функционал работы с картой высот, при любой попытки запуска которой возникает краш.

Создание карты высот.

Что такое карта высот?
Карта высот - это необработанное 2D изображение, которое хранит данные о ландшафте. Черные области на карте высот - низменности, соответственно, чем белее область - тем она выше.
К примеру, карты высот могут быть такими:

Создать карту высот можно с помощью Photoshop или с помощью специальных программ, таких как TerraGen , GeoControl2 и пр.

Рассмотрим пример создания карты высот:

  1. Запустим Photoshop и создадим новый файл размером 1024x1024.
  1. Далее зайдём в Image (Изображение) -> Mode (Режим) -> установить галочку напротив пункта Grayscale (Оттенки серого).
  1. Далее сделаем слой облаков: Filter (Фильтр) > Render (Рендер) > Clouds (Облака).
У вас должно получиться что-то вроде этого:
  1. Готово! Теперь сохраним получившуюся карту в формате Raw с разрядностью 8 бит.

Внимание! Изображение должно иметь размер 1024х1024 и 8 бит разрядности для корректного отображения карты высот в игре.

Исправляем ситуацию.

  1. После скачивания и распаковки архива откройте папку "01 MP GUI" и запустите оттуда установочный файл setup.exe. Когда установщик спросит вас об установке настроек в папку с игрой - соглашайтесь.
Install templates in these game directories - галочка должна стоять.
  1. Откройте папку "02 Update tesannwyn" из архива и скопировав её содержимое, замените все файлы в дирекции Skyrim/Data/ini/mpgui.
  1. Поместите содержимое папки "03 TESAnnwyn" в папку Skyrim/Data, это поможет программе сразу настраиваться на скайрим при запуске.
  1. Теперь идём в Skyrim/Data/ini/mpgui и запускаем файл tesannwyn.

Сразу переходим в последнюю вкладку и видим:

Первое поле - выбор файла карты высот.
Второе поле - выбор имени для вашего мира и уникального ID.
Третье поле - выбор двух возможных расширений карты высот - формат Raw и формат bmp.
Четвертое поле - выбор размера карты высот. Только для формата Raw.
Пятое поле: Scaling - выбор масштабирования высоты на одного юнита.
По-умолчанию стоит один. Я рекомендую поставить значение на 3

18.01.2017 18.01.2017

Третья часть урока по созданию собственной карты для ARMA 3. В этой части мы рассмотрим как создать карту реальной местности из Google Maps и какие программы для этого использовать.

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

  • Как создать свою карту для ARMA 3. Часть 3

Необходимые инструменты

Необходимо скачать несколько инструментов:

  • GIMP (https://www.gimp.org/) \\ Можете использовать любой граф. редактор.
  • Google Earth Pro \\ Именно PRO версия, она бесплатная
  • L3DT Pro \\ Именно PRO версия, она платная но мы подскажем как получить бесплатно

L3DT Pro нужная вещь для картадела, в нашем случае он нужен для карты высот. Что-бы скачать PRO версию перейдите по данной ссылке . На этой странице вы можете купить или получить пробную PRO версию L3DT на 90 дней (этого хватит). Для активации пробной версии жмем на register for a free 90-day trial .

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

Создаем реальную Карту Высот

Карта высот одна из самых главных проблем в этом деле. Если вы делаете реальную карту высот будьте готовы потратить кучу времени.

В нашем случае необходимо сначала сделать именно карту высот, в дальнейшем когда вы будете делать свою выбранную местность вы поймете почему. Для урока в Googl Maps мы выбрали остров Block Island (г. Нью Шорхэм) который находится в США. Почему именно США, а не родную Россию? К сожалению более четко Googl Maps отображает США и Европу.

Теперь необходимо скачать карту высот этого острова:

  1. Перейдите по ссылке Open Topography
  2. Найдите наш островок
  3. Нажмите кнопку Select A Region
  4. Обведите в квадрат наш остров

Ниже уберите галочку с Generate hillshade images from DEMs и введите любой почтовый ящик. Далее жмем кнопку SUMBIT

Теперь мы можем скачать карту высот в формате tag.gz

Осталось из “tag.gz” сделать формат “.bmp”. В этом нам поможет L3DT Pro, но сначала распакуйте tag.gz в tif. Для подойдет даже winrar, распакуйте текстуру и запускайте L3DT Pro.

В L3DT Pro заходим в File >> Import >> Heightfiled >> текстура формата tif

Полученная карта высот очень маленькая, что бы увеличить его в L3DT Pro переходим: Operations >> Heightfiled >> Resize Heightfiled.

В появившемся окошке выставляем нужный вам размер по Width. В нашем случает выставляем Width: 8192 Height: 6168

Размер выставлен, сохраняем карту высот в формате bmp. Для этого в L3DT Pro кликаем по текстуре Правой кнопкой мыши и выбираем Export. В окошке Exporta выбираем формат BMP и путь с названием.

Создаем высококачественную SATку для острова

Для создания SATки высокого качества нам понадобится Google Earth Pro. Метод который будет описан в уроке позволит сделать текстуру высокого качества, вы же можете сделать качество еще выше или ниже.

Наша сатка будет размером 8192 x 8192, весом около 200мб. Google Earth Pro позволяет сделать снимок в качестве 4К размером 4800 х 2757. Следовательно нужно сделать 6 снимков и поделить остров на 6 частей. Потом эти 6 частей соберутся в одну тяжелую текстуру.

Запускаем программу Google Earth Pro и находим в ней наш остров. Делим остров на 6 условных частей: 2 по горизонтали и 3 по вертикали 2757

Делаем на каждую часть снимок. Для этого приближаем до примерного куска части нашего острова и делаем снимок. В Google Earth Pro жмем кнопку “Сохранить изображение”, убираем все галочки в параметрах, ставим разрешение Maximum и сохраняем изображение в формате “.jpg”.

Проделываем тоже самое с остальными частями острова. В итоге должно получиться остров из 6 изображений. Например в Paint аккуратно скливаем наш остров. По итогу задаем размер текстуре 8192 x 8192 и сохраняем в формате BMP.

Вот таким нелегким путем наша сатка готова!

Создаем Маску для острова

Для создания на нашем уроке мы будем использовать GIMP. По итогу ваша маска будет отличаться от примера, но суть ее создания вы поймете. Она так же делиться на более или менее детальную маску и зависит от вашего размаха проекта. Наша маска будет иметь всего несколько цветов.

Закидываем 2 раза в GIMP нашу готовую Сатку и mapLegend.png

Переходим в ЦВЕТ >> Постеризация. Меняем значение – чем выше значение тем больше цветов и более точная получиться маска.

Ставим значение для посеризации, например 4. Теперь вы можете заменить или убрать цвета на необходимые например через mapLegend. Для этого в разделе “Выделение” >> “По цвету” выделяем нужные цвета и заливаем необходимые.

Надеюсь суть Вы поняли. Итог экспортируйте в формат BMP.

Создаем карту в Terrain Builder

*Насчет карты высот. Вам необходимо например в том же GIMP подогнать карту высот под сатку. К сожалению описать данный процесс мы не можем, для этого вам придется немного подучиться работать на граф.редакторе.

Допустим что ваша САТКА, КАРТА ВЫСОТ и МАСКА готовы, давайте создадим по ним карту в Terrain Builder! Вы так же можете скачать наш пример [ Я.ДИСК ]

О том как создать карту в Terrain Builder описано в е. Тут будет описаны параметры для карты.

Параметры для текстур:

В сегодняшнем уроке мы рассмотрим первый на нашем пути файловый формат. Различные форматы файлов предназначены для хранения разной информации. Каждый формат задаёт способ организации данных в файле.

Нам предстоит познакомиться с множеством различных форматов файлов: изображениями, трёхмерными моделями, аудио-файлами, видео-файлами. Начнём же с одного из самых простых графических форматов - BMP.

BMP - bitmap - битовое отображение. Понятие "отображение" взято из математики. В математике отображение стоит очень близко к понятию функции. Для простоты считайте, что слово bitmap - это картинка (хотя это и не так).

Информация о файле BMP (bmp file header)

У каждого файла bitmap есть заголовок из 14 байт. Поля этого заголовка:

2 байта. Строка BM (в Windows).
4 байта. Размер файла в байтах.

2 байта. Зарезервированное поле. Нужно инициализировать нулём.
4 байта. Адрес с которого начинается собственно изображение. Или по другому - смещение к началу изображения.

Давайте создадим изображение 100x100 пикселей. Каждый пиксель занимает 32 бита. Файловый заголовок будет выглядеть вот так:

BM
14+40+100*100*4
0
0
14+40

Важное замечание: на самом деле эти числа хранятся как последовательность байтов. Надеюсь, это понятно. Здесь (и в следующем примере) я расположил их в столбик для удобства восприятия.

Разберёмся со вторым полем. 14 - размер файлового заголовка. 40 - размер заголовка изображения (о нём ниже), 100*100 - количество пикселей. И кроме того, так как мы договорились, что каждый пиксель будет занимать 32 бита (4 байта), то нужно количество пикселей умножить на четыре.

Последнее поле: непосредственно изображение начинается сразу после файлового заголовка (14 байт) и заголовка изображения (40 байт).

Информация об изображении BMP (заголовок изображения)

Существует несколько версий BMP. Определить версию можно по размеру заголовка изображения. Мы будем пользоваться версией Windows V3, которая занимает 40 байт. Другие версии занимают 12, 64, 108, 124 байта.

В WinAPI для хранения bmp версии Windows V3 используется структура BITMAPINFOHEADER.

Поля заголовка Windows V3:

4 байта. Размер заголовка. Всегда задаётся 40 байт.
4 байта. Ширина изображения в пикселях.
4 байта. Высота изображения в пикселях.
2 байта. Данное поле всегда содержит единицу.
2 байта. Глубина цвета - количество битов в пикселе.
4 байта. Метод сжатия.
4 байта. Размер изображения. Здесь указывается размер непосредственно изображения - без учёта размера заголовков.
4 байта. Горизонтальное разрешение в пикселях на метр (количество пикселей в одном метре).
4 байта. Вертикальное разрешение в пикселях на метр (количество пикселей в одном метре).
4 байта. Количество цветов в палитре.
4 байта. Количество важных цветов в палитре.

Теперь посмотрим как будет выглядить заголовок изображения в нашем случае:

40
100
100
1
32
0
100*100*4
2795
2795
0
0

Для метода сжатия мы выбрали 0 - без сжатия. Возможны другие значения. Из интересных: BI_JPEG (значение - 4) - сжатие используемое в jpeg-изображениях и BI_PNG (значение - 5) - сжатие используемое в png-изображениях.

Горизонтальное и вертикальное разрешение мы задали равным 2795. В большинстве графических редакторов при создании изображения задаётся разрешение 71 пиксель на дюйм (ppi - pixel per inch)). Так вот, 71ppi это и есть 2795 пикселя на метр. Разрешение используется для придания изображению физической длины (для вывода на принтер например).

После заголовков расположена палитра цветов. Если её нету, то после заголовков сразу начинается изображение. Изображения с палитрами мы пока рассматривать не будем.

Данные изображения BMP

Изображение состоит из пикселей. Формат пикселей задаётся глубиной цвета (смотрите выше). В нашем примере мы использовали 32 бита на пиксель. 32-ух битный цвет обычно состоит из четырёх каналов: альфа (прозрачность), красный, зелёный, синий: ARGB (Alpha, Red, Green, Blue). Иногда альфа-канал не используется, в этом случае изображение всё равно может занимать 32 бита, просто при вычислениях не обращают внимания на значения одного канала. В этом случае названия каналов записываются так: XRGB.

Каждый канал занимает 8 бит (1 байт) и может принимать 256 значений: от нуля до 255 (от 0x00 до 0xff).

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

При 32-ухбитной глубине цвета каналы в bmp записываются так: BGRA. Именно в таком порядке: синий, зелёный, красный, альфа.

Размер строки данных в изображении bmp должнен быть кратен четырём (в байтах). Если это не так, то строка дополняется нулями. Это происходит если используется 1,2,4,8,16,24 бита на канал. Например, у нас есть изображение шириной в 3 пикселя и мы используем 16-битный цвет. Ширина строки: 16*3 = 48 (6 байт). Но длина строки должна быть кратной четырём, поэтому добавляются ещё два байта и длина строки в данном примере будет равна восьми байтам. Хотя в последних двух байтах каждой строки и не будет хранится полезной информации. Нужно учитывать условие кратности размера строки четырём при работе с не 32-ух битными изображениями.

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

Std::ofstream os("temp.bmp", std::ios::binary); unsigned char signature = { "B", "M" }; unsigned int fileSize = 14 + 40 + 100*100*4; unsigned int reserved = 0; unsigned int offset = 14 + 40; unsigned int headerSize = 40; unsigned int dimensions = { 100, 100 }; unsigned short colorPlanes = 1; unsigned short bpp = 32; unsigned int compression = 0; unsigned int imgSize = 100*100*4; unsigned int resolution = { 2795, 2795 }; unsigned int pltColors = 0; unsigned int impColors = 0; os.write(reinterpret_cast(signature), sizeof(signature)); os.write(reinterpret_cast(&fileSize), sizeof(fileSize)); os.write(reinterpret_cast(&reserved), sizeof(reserved)); os.write(reinterpret_cast(&offset), sizeof(offset)); os.write(reinterpret_cast(&headerSize), sizeof(headerSize)); os.write(reinterpret_cast(dimensions), sizeof(dimensions)); os.write(reinterpret_cast(&colorPlanes), sizeof(colorPlanes)); os.write(reinterpret_cast(&bpp), sizeof(bpp)); os.write(reinterpret_cast(&compression), sizeof(compression)); os.write(reinterpret_cast(&imgSize), sizeof(imgSize)); os.write(reinterpret_cast(resolution), sizeof(resolution)); os.write(reinterpret_cast(&pltColors), sizeof(pltColors)); os.write(reinterpret_cast(&impColors), sizeof(impColors)); unsigned char x,r,g,b; for (int i=0; i < dimensions; ++i) { for (int j=0; j < dimensions; ++j) { x = 0; r = rand() % 256; g = rand() % 256; b = rand() % 256; os.write(reinterpret_cast(&b),sizeof(b)); os.write(reinterpret_cast(&g),sizeof(g)); os.write(reinterpret_cast(&r),sizeof(r)); os.write(reinterpret_cast(&x),sizeof(x)); } } os.close();

В результате выполнения данного кода в папке с вашим проектом (если вы запускали программу через отладчик (F5)) или в папке Debug решения (если вы запускали исполняемый файл.exe) будет создан файл temp.bmp, который можно открыть в любом простмотрщике картинок. Изображение состоит из цветных точек.

BMP или Bitmap — растровый графический формат, совместимый с широким спектром программного обеспечения для просмотра и обработки изображений. BMP файлы хранят все пиксели изображения не применяя никакого сжатия. Формат ценен за способность сохранить первозданное качество изображения. Тем не менее, из-за отсутствия механизма сжатия, BMP файлы часто имеют огромный размер, что приводит к трудностям их хранения и передачи.

Как конвертировать MAP в BMP?

Самый простой способ — это скачать хорошую программу конвертации, например Фотоконвертер. Он работает быстро и эффективно, позволяя конвертировать любое количество MAP файлов за раз. Вы сможете довольно быстро оценить, что Фотоконвертер способен сэкономить массу времени которое вы будете тратить при работе вручную.

Скачайте и установите Фотоконвертер

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

Добавьте MAP файлы в Фотоконвертер

Запустите Фотоконвертер и загрузите.map файлы, которые вы хотите конвертировать в.bmp

Вы можете выбрать MAP файлы через меню Файлы → Добавить файлы либо просто перекинуть их в окно Фотоконвертера.

Выберите место, куда сохранить полученные BMP файлы


Выберите BMP в качестве формата для сохранения

Для выбора BMP в качестве формата сохранения, нажмите на иконку BMP в нижней части экрана, либо кнопку + чтобы добавить возможность записи в этот формат.


Теперь просто нажмите кнопку Старт и конвертация начнется мгновенно, а BMP файлы сохранятся в указанное место с нужными параметрами и эффектами.

Попробуйте бесплатную демо-версию

Видео инструкция

Интерфейс командной строки

Профессиональные пользователи могут конвертировать MAP в BMP используя командную строку в ручном или автоматическом режиме. За дополнительными консультациями по использованию cmd интерфейса обращайтесь в