Смотреть что такое "BMP" в других словарях. Чем открыть файл.BMP

Операционная система Android, которая устанавливается на большинстве смартфонов и планшетов, имеет ряд преимуществ перед аналогами. Но в то же время из-за своей простоты «операционка» от Google имеет недостатки, а именно: в ней отсутствует довольно много API-функций, которые отвечают за взаимодействие с файлами, например, работу с изображениями в форме BMP. Ситуацию помогают исправить дополнительные приложения: с их помощью можно полноценно использовать ОС Андроид.

Что такое формат BMP

BMP (от англ. BitMap Picture) - это формат изображения, который разработан корпорацией Microsoft. Фактически это расширение файла представляет собой изображение, информация о котором содержится побитно. Минус этого формата состоит в том, что в нём отсутствует сжатие. Потому размер картинок, сохранённых в стандартном формате (jpeg, png и другие), может быть в десятки раз меньше, чем размер такой же картинки, но с расширением bmp. Кроме того, отличительной характеристикой BMP файла является считывание данных: картинка прогружается снизу вверх, а не сверху вниз, как у остальных форматов.

Формат BMP разработан корпорацией Microsoft

Чем открыть BMP на Андроиде

К сожалению, стандартные инструменты Android не позволяют работать с форматом BMP, и даже открывать картинки для просмотра невозможно. Потому единственно правильным решением проблемы будет установка дополнительного программного обеспечения. Существуют специальные приложения, которые имеют в своём арсенале необходимые API-функции для работы с теми или иными форматами файлов.

Fast Image Viewer

  • разработчик: TDF Software;
  • лицензия: бесплатная, есть платная версия с расширенными возможностями.

Fast Image Viewer - это простая программа для просмотра всех форматов изображений (от BMP до TIFF). Для удобства пользования имеет собственный файловый менеджер, что упрощает навигацию по памяти устройства. Упор в функционале программы сделан на скорость работы. В приложение добавлены полезные мелочи: работа с картинками из MMC, а также обработка PDF файлов.

Приложение Fast Image Viewer читает все форматы изображений и имеет ряд полезных функций

Видео: как работать в приложении Fast Image Viewer

Perfect Viewer

  • доступно для скачивания в Google Play;
  • разработчик: Rookie001;
  • лицензия: бесплатная.

Программа Perfect Viewer - это отличный инструмент для просмотра разного рода изображений. В приложения вшита возможность просмотра всех популярных форматов, а также добавлен инструмент для более удобного чтения комиксов и книг. Существует возможность работы с файлами Google Drive, Dropbox, OneDrive.

Приложение Perfect Viewer - это качественный и удобный инструмент для просмотра изображений

Видео: как работать с приложением Perfect Viewer

JPG Image Size Reducer

  • доступно для скачивания в Google Play;
  • разработчик: GamesGreh;
  • лицензия: бесплатная.

Приложение JPG Image Size Reducer является конвертером и оптимизатором изображений. Основная особенность программы - уменьшение размера картинок, без потери качества. А это может существенно экономить место на вашем девайсе при хранении на нём больших массивов фотографий и документов. Приложение может работать со всеми видами картинок, конвертировать изображение из одного формата в другой.

Приложение JPG Image Size Reducer позволяет просматривать, конвертировать и изменять размеры картинок

File Viewer for Android

  • доступно для скачивания в Google Play;
  • разработчик: Sharpened Productions;
  • лицензия: бесплатная.

File Viewer for Android - это файловый менеджер с огромным потенциалом для просмотра информации. В программу вшиты большинство функций для открытия практических всех возможных файлов: документы, изображения, архивы, медиафайлы и многое другое (всего считывается больше 100 форматов). К сожалению, приложению недостаёт качественного русского перевода, а также функций по сохранению изменений, которые вносят пользователи.

Приложение File Viewer for Android - это мощный менеджер просмотра файлов

Image Viewer

  • доступно для скачивания в Google Play;
  • разработчик: Byte Mobile;
  • лицензия: бесплатная.

Программа Perfect Viewer создана для замены стандартного инструмента «Галерея». Приложение умеет искать и просматривать все изображения на девайсе, а также в интернете. Устанавливать картинки в качестве рабочего стола, настраивать яркость и контрастность. Работает со всеми основными форматами изображений (PNG, JPG, GIF, BMP, TGA и другие).

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

Нам предстоит познакомиться с множеством различных форматов файлов: изображениями, трёхмерными моделями, аудио-файлами, видео-файлами. Начнём же с одного из самых простых графических форматов - 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. Хоть это и один из простых форматов, но из-за того, что существует много вариаций этого формата, то не все моменты очевидны. Итак, хватит лить воду, начнем.

Структуры формата

Формат bmp (от слов BitMaP - битовая карта, или, говоря по-русски, битовый массив) представляет из себя несжатое (в основном) изображение, которое довольно легко читается и выводится в ОС Windows, в которой есть специальные функции API, которые в этом помогают.

Для начала приведем графическое представление данных в bmp (картинка взята из MSDN).

В начале стоит заголовок файла (BITMAPFILEHEADER). Он описан следующим образом:

bfType определяет тип файла. Здесь он должен быть BM. Если Вы откроете любой файл BMP в текстовом (а лучше в 16-ричном редакторе), то увидите, что первые два символа - это BM (от слова BitMap, как вы уже, наверное, догадались).
bfSize - это размер самого файла в байтах. Строго говоря вы должны его высчитывать (что рекомендуется), но я ставил размер файла неправильно (правда, не нарочно:)) и никаких проблем не было (ACDSee читало без проблем, моя программа работала), но я вам не рекомендую писать его заведомо неправильно, вдруг появится добросовестная программа, которая сверит этот размер с настоящим и решит, что это не bmp, а что-нибудь другое. В идеале все программы для того, чтобы убедиться, что перед ними действительно bmp, а не подделка, должны, во-первых, проверить, что bfType содержит "BM" (без кавычек), а, во-вторых, что bfSize равен размеру файла.
bfReserved1 и bfReserved2 зарезервированы и должны быть нулями.
bfOffBits . Это один из самых важных полей в этой структуре. Он показывает, где начинается сам битовый массив относительно начала файла (или, как написано в MSDN, "от начала структуры BITMAPFILEHEADER"), который и описывает картинку. То есть, чтобы гарантированно попадать на начало массива вы должны писать:

typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, * PBITMAPINFOHEADER;

biSize - это размер самой структуры. Ее нужно инициализировать следующим образом: bih.biSize = sizeof (BITMAPINFOHEADER);
Снова здесь и дальше будем считать, что bih объявлена следующим образом: BITMAPINFOHEADER bih;
biWidth и biHeight задают соответственно ширину и высоту картинки в пикселях.
biPlanes задает количество плоскостей. Пока оно всегда устанавливается в 1.
biBitCount - Количество бит на один пиксель. Подробнее про это поговорим ниже.
biCompression обозначает тип сжатия. Не удивляйтесь и не пугайтесь, что в bmp и вдруг сжатие. Я лично не видел не одной сжатой bmp (но я не говорю, что таких не существует). Если сжатия нет, то этот флаг надо устанавливать в BI_RGB. В этой статье мы говорим про несжатый формат, поэтому другие флаги я даже не буду перечислять. Похоже, что эта же структура используется и в файлах JPEG и PNG, потому что, начиная с Windows 98 тут появились варианты BI_JPEG, которая показывает, что эта картинка - JPEG и BI_PNG, что это PNG (про формат Jpeg я ничего не знаю, я только сделал эти выводы исходя из того, что написано в MSDN).
biSizeImage обозначает размер картинки в байтах. Если изображение несжато (то есть предыдущее поле установлено в BI_RGB), то здесь должен быть записан ноль. biXPelsPerMeter и biYPelsPerMeter обозначают соответственно горизонтальное и вертикальное разрешение (в пикселях на метр) конечного устройства, на которое будет выводиться битовый массив (растр). Приложение может использовать это значение для того, чтобы выбирать из группы ресурсов наиболее подходящий битовый массив для нужного устройства. Дело в том, что формат bmp - это по сути аппаратно-независимый растр, то есть когда внешний вид того, что получается не зависит от того, на что этот растр проецируется (если можно так выразится). Например, картинка будет выглядеть одинаково вне зависимости от того, рисуется она на экране монитора или печатается на принтере. Но вот разрешение у устройств разное, и именно для того, чтобы выбрать наиболее подходящую картинку из имеющихся и используют эти параметры.
biClrUsed определяет количество используемых цветов из таблицы. Если это значение равно нулю, то в растре используется максимально возможное количество цветов, которые разрешены значением biBitCount. Это актуально только для сжатых картинок. Если biClrUsed не нуль и biBitCount меньше 16, то biClrUsed определяет текущее число цветов графического движка или доступного драйвера устройства. Если biBitCount больше или равно 16, то biClrUsed определяет размер таблицы цветов, используемой для оптимизации текущей системной палитры.
biClrImportant - это количество важных цветов. Определяет число цветов, которые необходимы для того, чтобы изобразить рисунок. Если это значение равно 0 (как это обычно и бывает), то все цвета считаются важными.

Виды формата BMP

Все разновидности формата bmp условно можно разделить на два типа: палитровые и беспалитровые. То есть используется в данном с формате палитра или нет. Заметьте, что палитра может быть даже в беспалитровых форматах, только там она не используется. В беспалитровых bmp цвет высчитывается прямо из тех битов, которые идут в файле, начиная с некоторого места. А в палитровых каждый байт описывает один или несколько пикселей, причем значения байта (или битов) - это индекс цвета в палитре. Для начала приведу таблицу, которая сравнивает возможные варианты. Вид картинки (палитровая или беспалитровая) зависит от того, сколько бит отдается на один пиксель, то есть от значения biBitCount структуры BITMAPINFOHEADER.

biBitCount Палитровый или беспалитровый формат Максимально возможное количество цветов Примечания 1 Палитровый 2 Двуцветная, заметьте, не обязательно черно-белая, палитровая картинка. Если бит растра (что это такое чуть ниже) сброшен (равен 0), то это значит, что на этом месте должен быть первый цвет из палитры, а если установлен (равен 1), то второй. 4 Палитровый 16 Каждый байт описывает 2 пикселя. Вот пример из MSDN .Если первый байт в картинке 0x1F, то он соответствует двум пикселям, цвет первого - второй цвет из палитры (потому что отсчет идет от нуля), а второй пиксель - 16-й цвет палитры. 8 Палитровый 256 Один из самых распространенных вариантов. Но в то же время и самых простых. Палитра занимает один килобайт (но на это лучше не рассчитывать). Один байт - это один цвет. Причем его значение - это номер цвета в палитре. 16 Беспалитровый 2^16 или 2^15 Это самый запутанный вариант. Начнем с того, что он беспалитровый, то есть каждые два байта (одно слово WORD) в растре однозначно определяют один пиксель. Но вот что получается: битов-то 16, а компонентов цветов - 3 (Красный, Зеленый, Синий). А 16 никак на 3 делиться не хочет. Поэтому здесь есть два варианта. Первый - использовать не 16, а 15 битов, тогда на каждую компоненту цвета выходит по 5 бит. Таким образом мы можем использовать максимум 2^15 = 32768 цветов и получается тройка R-G-B = 5-5-5. Но тогда за зря теряется целый бит из 16. Но так уж случилось, что наши глаза среди всех цветов лучше воспринимают зеленый цвет, поэтому и решили этот один бит отдавать на зеленую компоненту, то есть тогда получается тройка R-G-B = 5-6-5, и теперь мы может использовать 2^16 = 65536 цветов. Но что самое неприятное, что используют оба варианта. В MSDN предлагают для того, чтобы различать сколько же цветов используется, заполнять этим значением поле biClrUsed из структуры BITMAPINFOHEADER. Чтобы выделить каждую компоненту надо использовать следующие маски. Для формата 5-5-5: 0x001F для синей компоненты, 0x03E0 для зеленой и 0x7C00 для красной. Для формата 5-6-5: 0x001F - синяя, 0x07E0 - зеленая и 0xF800 красная компоненты соответственно. 24 Беспалитровый 2^24 А это самый простой формат. Здесь 3 байта определяют 3 компоненты цвета. То есть по компоненте на байт. Просто читаем по структуре RGBTRIPLE и используем его поля rgbtBlue, rgbtGreen, rgbtRed. Они идут именно в таком порядке. 32 Беспалитровый 2^32 Здесь 4 байта определяют 3 компоненты. Но, правда, один байт не используется. Его можно отдать, например, для альфа-канала (прозрачности). Читать растр в данном случае удобно структурами RGBQUAD, которая описана так:

Хранение данных в формате bmp

Ну вот и подошли к самому интересному. После структур BITMAPFILEHEADER и BITMAPINFOHEADER идет палитра. Причем, если формат беспалитровый, то ее может и не быть, однако, на это рассчитывать не надо. Дело в том, что, когда я только начинал разбираться с форматом bmp, в одной книжке я вычитал, что, якобы, если формат беспалитровый, то у нее вообще нет палитры. Там даже были две картинки - схемы формата: одна с палитрой, другая без. А я в это время писал программу, которая усердно оперирует с bmp-шками. И мне надо было преобразовывать входящие картинки из 256 цветов в 24-битные (если таковые имелись) во временные файлы. И я в 24-битных палитру просто не создавал (bfOffBits из структуры BITMAPFILEHEADER у меня был равен сумме sizeof(BITMAPFILEHEADER) + sizeof (BITMAPINFOHEADER), а входящие 24-разрядные оставлял без изменений. С 256-цветными растрами все работало как надо, пока мне не попалась 24-разрядная картинка, у которой внизу вместо нужной части отображался мусор. Я не сразу понял в чем дело. Пока не сравнил размер исходного файла с теоретическим, который должен был быть, не будь палитры. Разница оказалась ровно 1 Kб (ровно 1024 байта). Там была палитра. Поэтому никогда не рассчитывайте на то, есть ли палитра и не надейтесь на ее размер (хотя все картинки, которые мне попадались имели размер палитры 256 цветов, или 1Кб), всегда перемещайтесь по файлу на начало растра, используя bfOffBits. Палитра представляет из себя массив структур RGBQUAD идущих друг за другом. Даже если в палитре используются не все цвета (а только, например, 16), то часто все равно под палитру отводят 256 полей. А 256 * 4 = 1024, где 4 - размер структуры RGBQUAD, то есть и получается тот самый один килобайт.

Сразу за палитрой идет сам растр. Тут уже более запутано. Во-первых, пиксели тут описываются так, как написано в таблице выше в зависимости от формата. И могут сами содержать значение компонентов цвета (для беспалитровых), а могут быть индексами массива-палитры. Сама картинка записывается построчно. Во-вторых, картинка идет как бы перевернутая вверх ногами. То есть сначала записана нижняя строка, потом предпоследняя и так далее до самого верха. И, в-третьих, как написано в , если размер строки растра не кратен 4, то она дополняется от 1 до 3 пустыми (нулевыми) байтами, чтобы длина строки оказалась кратна параграфу. Вот это и есть самое неприятное. Дело в том, что для каждого формата приходится подстраивать это число пустых байтов (правда, я люблю туда записывать часть палитры, просто мне не хочется заводить лишние "нулевые" переменные, если все-равно эти байты пропускают и никому они не нужны). Я привожу таблицу с формулами, которые показывают для какого формата сколько байт надо дописывать в конец строки. Там под переменной Width, как можно догадаться, подразумевается ширина картинки. Все эти формулы были установлены экспериментально. Я приведу пример только для наиболее используемых форматов. Для остальных вы можете написать сами.

Примеры программ

Все исходники вы можете скачать .Я особо не буду тут много писать. Просто приведу функции с комментариями.

Привет 1. Создание картинки в формате bmp.
Здесь создается однотонная картинка. В примерах таких функций три: создание bmp 8, 16 и 24 бит. Я приведу только для 16-битных.

// Создадим картинку в формате bmp 16 бит типа 5-5-5, которая будет просто однотонной
void CreateBmp555 (char * fname, WORD color)
{
HANDLE hFile;
DWORD RW;
int i, j;

// Объявим нужные структуры
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
BYTE Palette [ 1024 ] ; // Палитра

// Пусть у нас будет картинка размером 35 x 50 пикселей
int Width = 35 ;
int Height = 50 ;

memset (Palette, 0 , 1024 ) ; // В палитре у нас нули заполним их
memset (& bfh, 0 , sizeof (bfh) ) ;

Bfh.bfType = 0x4D42 ; // Обозначим, что это bmp "BM"
bfh.bfOffBits = sizeof (bfh) + sizeof (bih) + 1024 ; // Палитра занимает 1Kb, но мы его использовать не будем
bfh.bfSize = bfh.bfOffBits +
sizeof (color) * Width * Height +
Height * ((sizeof (color) * Width) % 4 ) ; // Посчитаем размер конечного файла
memset (& bih, 0 , sizeof (bih) ) ;
bih.biSize = sizeof (bih) ; // Так положено
bih.biBitCount = 16 ; // 16 бит на пиксель
bih.biClrUsed = 32768 ; // Мы используем 5-5-5
bih.biCompression = BI_RGB; // Без сжатия
bih.biHeight = Height;
bih.biWidth = Width;
bih.biPlanes = 1 ; // Должно быть 1
// А остальные поля остаются 0

HFile = CreateFile (fname, GENERIC_WRITE, 0 , NULL , CREATE_ALWAYS, 0 , NULL ) ;
if (hFile == INVALID_HANDLE_VALUE)
return ;

// Запишем заголовки
WriteFile (hFile, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile (hFile, & bih, sizeof (bih) , & RW, NULL ) ;

// Запишем палитру
WriteFile (hFile, Palette, 1024 , & RW, NULL ) ;
for (i = 0 ; i < Height; i++ )
{
for (j = 0 ; j < Width; j++ )
{
WriteFile (hFile, & color, sizeof (color) , & RW, NULL ) ;
}

// Выровняем по границе
WriteFile (hFile, Palette, (sizeof (color) * Width) % 4 , & RW, NULL ) ;
}
CloseHandle(hFile) ;
}

color - цвет картинки. Значение этой переменной должно быть заполнено в соответствии с первой таблицей. Получившуюся картинку вы можете посмотреть в ACDSee, например. Просто я пробовал ее открыть в Photoshop"е, оказалось, что в этом формате он их читать не умеет. А вы можете:).

Пример 2. Преобразование картинки из формата 8 бит (256 цветов) в 24 бит.

BOOL Convert256To24 (char * fin, char * fout)
{
BITMAPFILEHEADER bfh;
BITMAPINFOHEADER bih;
int Width, Height;
RGBQUAD Palette[ 256 ] ;
BYTE * inBuf;
RGBTRIPLE * outBuf;
HANDLE hIn, hOut;
DWORD RW;
DWORD OffBits;
int i, j;

HIn = CreateFile (fin, GENERIC_READ, FILE_SHARE_READ, NULL , OPEN_EXISTING, 0 , NULL ) ;
if (hIn == INVALID_HANDLE_VALUE)
return FALSE;

HOut = CreateFile (fout, GENERIC_WRITE, 0 , NULL , CREATE_ALWAYS, 0 , NULL ) ;
if (hOut == INVALID_HANDLE_VALUE)
{
CloseHandle (hIn) ;
return FALSE;
}

// Прочтем данные
ReadFile (hIn, & bfh, sizeof (bfh) , & RW, NULL ) ;
ReadFile (hIn, & bih, sizeof (bih) , & RW, NULL ) ;
ReadFile (hIn, Palette, 256 * sizeof (RGBQUAD) , & RW, NULL ) ;

// Установим указатель на начало растра
SetFilePointer (hIn, bfh.bfOffBits , NULL , FILE_BEGIN) ;
Width = bih.biWidth ;
Height = bih.biHeight ;
OffBits = bfh.bfOffBits ;

// Выделим память
inBuf = new BYTE [ Width] ;
outBuf = new RGBTRIPLE [ Width] ;

// Заполним заголовки
bfh.bfOffBits = sizeof (bfh) + sizeof (bih) ; // Не будем писать палитру
bih.biBitCount = 24 ;
bfh.bfSize = bfh.bfOffBits + 4 * Width * Height + Height * (Width % 4 ) ; // Размер файла

// А остальное не меняется
// Запишем заголовки
WriteFile (hOut, & bfh, sizeof (bfh) , & RW, NULL ) ;
WriteFile (hOut, & bih, sizeof (bih) , & RW, NULL ) ;

// Начнем преобразовывать
for (i = 0 ; i < Height; i++ )
{
ReadFile (hIn, inBuf, Width, & RW, NULL ) ;
for (j = 0 ; j < Width; j++ )
{
outBuf[ j] .rgbtRed = Palette[ inBuf[ j] ] .rgbRed ;
outBuf[ j] .rgbtGreen = Palette[ inBuf[ j] ] .rgbGreen ;
outBuf[ j] .rgbtBlue = Palette[ inBuf[ j] ] .rgbBlue ;
}
WriteFile (hOut, outBuf, sizeof (RGBTRIPLE) * Width, & RW, NULL ) ;

// Пишем мусор для выравнивания
WriteFile (hOut, Palette, Width % 4 , & RW, NULL ) ;
SetFilePointer (hIn, (3 * Width) % 4 , NULL , FILE_CURRENT) ;
}

delete inBuf;
delete outBuf;
CloseHandle (hIn) ;
CloseHandle (hOut) ;
return TRUE;
}

В функцию надо передавать имена исходного и конечного файла соответственно.

Файлы формата bmp обычно хранят растровые изображения. Этот формат не является сжатым и используется в Windows.

Более подробно о файлах BMP

Данный формат графики называется «аппаратно независимый растр». Сам файл состоит таких частей: заголовка файла (здесь хранятся данные о ширине и высоте файла, цветовых характеристиках начальной точки, растровом идентификаторе), заголовка изображения (его может не быть), палитры (может не быть) и самой картинки.

Информация в растровых изображениях представлена в пикселях. При этом для каждого пикселя задано определенное положение и значение цвета. В файлах BMP может быть задана разная глубина цвета на один пиксель, что зависит от числа битов на пиксель (это указывается в заголовке файла). Кроме того файл bmp может содержать изображение в оттенках серого.

Чем просматривать файлы BMP

Большинство популярных программ-просмотрщиков графики без проблем смогут открыть и отобразить содержимое, хранящееся в файле BMP, поэтому проблем возникнуть не должно. Под ОС Windows можно воспользоваться встроенной утилитой «Средство просмотра фотографий Windows».

Помимо стандартных средств, открыть BMP в режиме просмотра поможет любая из следующих программ:

  1. IrfanView — программа небольшого размера для просмотра графики и видео под операционные системы Windows и ReactOS. Бесплатна для некоммерческого использования;
  2. Simply Slideshow. Бесплатная программа. С ее помощью изображения можно смотреть в режиме слайд-шоу;
  3. xnView — еще одна достойная программа для просмотра графики;
  4. ACDS Free — бесплатная версия одного из и органайзеров графических файлов. Хоть и обладает некоторыми ограничениями по сравнению с платной версией, функционала вполне достаточно для работы с BMP и рядом других графических форматов.

Какими программами открыть BMP для редактирования

Файл bmp в Windows можно открыть с помощью стандартного редактора графики. Однако подойдет почти любой графический редактор, среди них – много бесплатных. Наиболее популярны следующие:

  1. Paint.NET. Это бесплатная программа, обладающая множеством функций для корректировки фотографий и других изображений. Заявлена производителей как замена стандартной MS Paint;
  2. Gimp — популярнейший редактор растровой графики, к тому же еще и бесплатный. Рекомендуем к использованию не только для работы с BMP, но и с другими графическими форматами;
  3. PhotoScape – замечательный многофункциональный редактор для просмотра и обработки картинок и фото.

Если на вашем ПК стоит Mac OS, то воспользуйтесь такими приложениями:

  • Программа Apple Preview;
  • Adobe Fireworks для Mac;
  • Roxio Toast 11;
  • Photoshop Elements 11;

Под bmp также открывает приложение GIMP.

Как конвертировать BMP в другие форматы

С конвертацией BMP в иные популярные графические форматы проблем не будет ввиду его широкой поддержки графическими редакторами. Чтобы сохранить BMP файл в PNG или JPEG, достаточно открыть такой файл любым графическим редактором из списка выше, и воспользоваться функциями экспорта или сохранения («Сохранить как…»). В списке форматов, в который будет сохранено содержимое, выбрать нужный. Ну и, конечно, указать путь для сохранения.

Итак, формат bmp популярен, поэтому редакторов, которые его «понимают», просто множество. Стоит испробовать несколько программ, чтобы выбрать наилучшую для себя.

You"re here because you have a file that has a file extension ending in .bmp. Files with the file extension .bmp can only be launched by certain applications. It"s possible that .bmp files are data files rather than documents or media, which means they"re not meant to be viewed at all.

what is a .bmp file?

The BMP file format is comprised of a set of image encoding specifications implemented for the production of uncompressed raster image files. These bitmap image files are attached with file headers that include bitmap identifiers among other details specific to the image content of the corresponding BMP files. The digital image content stored in a BMP file consists of pixels within a rectangular grid. The pixels contained in these BMP files can be integrated with varying color depths, depending on the file headers of the BMP files. Grayscale gradients may also be applied unto the pixels of a .bmp file, and these .bmp files can be exported unto more widely used digital image file formats with smaller size for optimal portability.

how to open a .bmp file?

Launch a .bmp file, or any other file on your PC, by double-clicking it. If your file associations are set up correctly, the application that"s meant to open your .bmp file will open it. It"s possible you may need to download or purchase the correct application. It"s also possible that you have the correct application on your PC, but .bmp files aren"t yet associated with it. In this case, when you try to open a .bmp file, you can tell Windows which application is the correct one for that file. From then on, opening a .bmp file will open the correct application.

applications that open a .bmp file

Adobe Photoshop CS6 for Microsoft Windows

Adobe Photoshop CS6 for Microsoft Windows is an image editing and managing software downloadable on Windows computers, namely Windows 7 (without SP and with SP1) and Windows XP with SP3. This software comes with new features and tools for easy, quick, fun and advanced editing of digital images. One feature that makes this program reliable for image editing is the Adobe Mercury Graphics Engine, which is an engine technology that provides faster and high quality performance. Content-Aware tools are new features designed for retouching images with ease as you can crop images without any effect, auto-correct blurriness or wide-angle lens curvatures, remove red eye, and adjust color balance like brightness and contrast. This image editor is also bundled with auto-recovery feature that can backup any unsaved images, Background Save option, Blur Gallery, Crop tool, video creation, and a whole lot more. With all these new improved features and a modern friendly-user interface, editing digital photos can never be so fun and easy without Photoshop CS6.

Adobe Photoshop CS6 for Mac

Adobe Photoshop CS6 for Mac

Adobe Photoshop CS6 for Mac is the version of “Creative Suite” image managing software designed exclusively for Mac computers, particularly Mac OS X v10.6 to 10.7 in 64-bit. This image editing program is bundled with a new set of features and tools, such as the Mercury Graphics Engine developed by the same company for fast and high quality image enhancing performance, Content-Aware features, intuitive re-imagined tools for movie designing, workflows, Blur Gallery, Crop tool and a whole lot more. The Adobe Mercury Graphics Engine functions in a way that it makes editing task easy and fast to complete. This also allows the sharing and migration of images with auto-recovery and Background Save options. The new Content-Aware tools are made for easy and controllable way of retouching or enhancing images that result in a more satisfied output. It basically lets any user to auto-correct images, crop them and correct wide angle lens curvatures.

ACD Systems Canvas 14

ACD Systems Canvas 14

ACD Systems International Inc. is the developer of ACD Systems Canvas 14, which is a technical graphics solution software, that enables users to analyze data, enhance graphics and share all information with ease and rapidness. This program is designed with full-featured tools that assist users in making technical graphics and illustrations with accuracy. It consists of editing tools that vary from image editing to object illustration tools. Any results created by this program make good presentations for projects, proposals and other purposes for any line of business related to graphics and engineering. More on the features, users can work with raster images and vector graphics using the same file with the option edit by resizing and scaling objects, drawing shapes, as well as inserting stroke and fill inks or widths. There is also a tool for adding texts or labels and format dimensions, plus creating charts. With this program, users can share finished projects through presentations or publications.

ACD Systems ACDSee 15

ACD Systems ACDSee 15

ACD Systems ACDSee 15 is a photography software that features an image organizer, viewer, and RAW/ image editor program for Microsoft Windows and Mac OS X 10.6 (Windows XP with Service Pack 2, Vista, 7 & 8; Mac OS X 10.5, 10.6, 10.7 and Mountain Lion). It was developed by ACD Systems International, Inc. and originally distributed as a 16-bit application that was later upgraded with a 32-bit version. This minimum hardware requirement for this application is an Intel Pentium III/ AMD Athlon processor or equivalent with 512 MB RAM (with 310 MB free hard drive space), a high color display adapter at 1024 x 768 resolution, and a CD/ DVD burner. ACDSee manages and supports video and audio files in formats that include GIF, BMP, JPG, PNG, MP3, PSD, WAV, MPEG, and TIFF. Users can view, edit, add effects, and organize photo and video collections that can be shared online. Photos can be organized as these are imported from the camera or other storage device. It also features Map view and geo-tagging support that enable users to view the location of images from GPS-enabled cameras. Features like fast browsing, scanning, editing, and backup options facilitate sorting of photos by date and event, and storage of backup copies to CD, DVD, and Blu-Ray.