Формат файла bmp — bmp file format

Содержание:

Файлы BMP

В файлах BMP информация о цвете каждого пикселя кодируется 1, 4, 8,
16 или 24 бит (бит/пиксель). Числом бит/пиксель, называемым также глубиной
представления цвета, определяется максимальное число цветов в изображении.
Изображение при глубине 1 бит/пиксель может иметь всего два цвета, а при
глубине 24 бит/пиксель — более 16 млн. различных цветов.
 

Заголовок файла растровой графики (14 байт)
Сигнатура файла BMP (2 байт)
Размер файла (4 байт)
Не используется (2 байт)
Не используется (2 байт)
Местонахождение данных растрового массива (4 байт)
Информационный заголовок растрового массива
(40 байт)

Длина этого заголовка (4 байт)
Ширина изображения (4 байт)
Высота изображения (4 байт)
Число цветовых плоскостей (2 байт)
Бит/пиксель (2 байт)
Метод сжатия (4 байт)
Длина растрового массива (4 байт)
Горизонтальное разрешение (4 байт)
Вертикальное разрешение (4 байт)
Число цветов изображения (4 байт)
Число основных цветов (4 байт)
Таблица цветов (длина изменяется от 8 до 1024
байт)
Собственно данные растрового массива (длина
переменная)

На приведенной схеме показана структура типичного BMP-файла, содержащего
256-цветное изображение (с глубиной 8 бит/пиксель). Файл разбит на четыре
основные раздела: заголовок файла растровой графики, информационный заголовок
растрового массива, таблица цветов и собственно данные растрового массива.
Заголовок файла растровой графики содержит информацию о файле, в том числе
адрес, с которого начинается область данных растрового массива. В информационном
заголовке растрового массива содержатся сведения об изображении, хранящемся
в файле, например, его высоте и ширине в пикселях. В таблице цветов представлены
значения основных цветов RGB (красный, зеленый, синий) для используемых
в изображении цветов. Программы, считывающие и отображающие BMP-файлы,
в случае использования видеоадаптеров, которые не позволяют отображать
более 256 цветов, для точной цветопередачи могут программно устанавливать
такие значения RGB в цветовых палитрах адаптеров.

Формат собственно данных растрового массива в файле BMP зависит от числа
бит, используемых для кодирования данных о цвете каждого пикселя. При 256-цветном
изображении каждый пиксель в той части файла, где содержатся собственно
данные растрового массива, описывается одним байтом (8 бит). Это описание
пикселя не представляет значений цветов RGB, а служит указателем для входа
в таблицу цветов файла. Таким образом, если в качестве первого значения
цвета RGB в таблице цветов файла BMP хранится R/G/B=255/0/0, то значению
пикселя 0 в растровом массиве будет поставлен в соответствие ярко-красный
цвет. Значения пикселей хранятся в порядке их расположения слева направо,
начиная (как правило) с нижней строки изображения. Таким образом, в 256-цветном
BMP-файле первый байт данных растрового массива представляет собой индекс
для цвета пикселя, находящегося в нижнем левом углу изображения; второй
байт представляет индекс для цвета соседнего справа пикселя и т. д. Если
число байт в каждой строке нечетно, то к каждой строке добавляется дополнительный
байт, чтобы выровнять данные растрового массива по 16-бит границам.

Не все файлы BMP имеют структуру, подобную показанной на схеме. Например,
файлы BMP с глубиной 16 и 24 бит/пиксель не имеют таблиц цветов; в этих
файлах значения пикселей растрового массива непосредственно характеризуют
значения цветов RGB. Также могут различаться внутренние форматы хранения
отдельных разделов файла. Например, информация растрового массива в некоторых
16 и 256-цветных BMP-файлах может сжиматься посредством алгоритма RLE,
который заменяет последовательности идентичных пикселей изображения на
лексемы, определяющие число пикселей в последовательности и их цвет. В
Windows допускается работа с BMP-файлами стиля OS/2, в которых используются
различные форматы информационного заголовка растрового массива и таблицы
цветов.

Чтение bmp в C++

Опубликовано 13.12.2012 в 15:03

UPDATED: Здесь более правильный вариант программы!

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

Решение этой задачи покажется очень простым, если знать спецификацию bmp формата. Байты с цветами каждого пиксела начинаются с 54-го байта и при считывании заголовков bmp формата, указатель сместился на нужную нам позицию. Считать байт можно функцией getc(FILE *stream). Цвета каждого пиксела находятся в формате BGR(не привычный нам RGB). Остается прочитать по порядку каждый байт и записать все значения в двумерный массив.

Файл main.h

#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
 
 
typedef struct
{
    unsigned int    bfType;
    unsigned long   bfSize;
    unsigned int    bfReserved1;
    unsigned int    bfReserved2;
    unsigned long   bfOffBits;
} BITMAPFILEHEADER;
 
typedef struct
{
    unsigned int    biSize;
    int             biWidth;
    int             biHeight;
    unsigned short  biPlanes;
    unsigned short  biBitCount;
    unsigned int    biCompression;
    unsigned int    biSizeImage;
    int             biXPelsPerMeter;
    int             biYPelsPerMeter;
    unsigned int    biClrUsed;
    unsigned int    biClrImportant;
} BITMAPINFOHEADER;
 
typedef struct
{
    int   rgbBlue;
    int   rgbGreen;
    int   rgbRed;
    int   rgbReserved;
} RGBQUAD;
 
 
static unsigned short read_u16(FILE *fp);
static unsigned int   read_u32(FILE *fp);
static int            read_s32(FILE *fp);
 
#endif // MAIN_H_INCLUDEDs

Файл main.cpp

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "main.h"
 
int main()
{
    FILE * pFile = fopen("file.bmp", "rb");
 
    // считываем заголовок файла
    BITMAPFILEHEADER header __attribute__((unused));
 
    header.bfType      = read_u16(pFile);
    header.bfSize      = read_u32(pFile);
    header.bfReserved1 = read_u16(pFile);
    header.bfReserved2 = read_u16(pFile);
    header.bfOffBits   = read_u32(pFile);
 
    // считываем заголовок изображения
    BITMAPINFOHEADER bmiHeader;
 
    bmiHeader.biSize          = read_u32(pFile);
    bmiHeader.biWidth         = read_s32(pFile);
    bmiHeader.biHeight        = read_s32(pFile);
    bmiHeader.biPlanes        = read_u16(pFile);
    bmiHeader.biBitCount      = read_u16(pFile);
    bmiHeader.biCompression   = read_u32(pFile);
    bmiHeader.biSizeImage     = read_u32(pFile);
    bmiHeader.biXPelsPerMeter = read_s32(pFile);
    bmiHeader.biYPelsPerMeter = read_s32(pFile);
    bmiHeader.biClrUsed       = read_u32(pFile);
    bmiHeader.biClrImportant  = read_u32(pFile);
 
 
    RGBQUAD **rgb = new RGBQUAD*bmiHeader.biWidth;
    for (int i = ; i < bmiHeader.biWidth; i++) {
        rgbi = new RGBQUADbmiHeader.biHeight;
    }
 
    for (int i = ; i < bmiHeader.biWidth; i++) {
        for (int j = ; j < bmiHeader.biHeight; j++) {
            rgbij.rgbBlue = getc(pFile);
            rgbij.rgbGreen = getc(pFile);
            rgbij.rgbRed = getc(pFile);
        }
 
        // пропускаем последний байт в строке
        getc(pFile);
    }
 
    // выводим результат
    for (int i = ; i < bmiHeader.biWidth; i++) {
        for (int j = ; j < bmiHeader.biHeight; j++) {
            printf("%d %d %d\n", rgbij.rgbRed, rgbij.rgbGreen, rgbij.rgbBlue);
        }
        printf("\n");
    }
 
    fclose(pFile);
    return ;
}
 
 
static unsigned short read_u16(FILE *fp)
{
    unsigned char b0, b1;
 
    b0 = getc(fp);
    b1 = getc(fp);
 
    return ((b1 << 8) | b0);
}
 
 
static unsigned int read_u32(FILE *fp)
{
    unsigned char b0, b1, b2, b3;
 
    b0 = getc(fp);
    b1 = getc(fp);
    b2 = getc(fp);
    b3 = getc(fp);
 
    return ((((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
}
 
 
static int read_s32(FILE *fp)
{
    unsigned char b0, b1, b2, b3;
 
    b0 = getc(fp);
    b1 = getc(fp);
    b2 = getc(fp);
    b3 = getc(fp);
 
    return ((int)(((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
}

4-bit and 8-bit Bitmap images

Similar to the monochromatic image, 4-bit and 8-bit Bitmap images need a color pallet. However, a 4-bit color pallet can have at max 16 entries and an 8-bit color pallet can have 256 entries.

The way a pixel can point to an index of the color entry in the color pallet is the same as the monochromatic image. However, in the case of a 4-bit image, a pixel value is defined with 4 bits and for the 8-bit image, a pixel value is defined with 8 bits. This means, 1 byte of Pixel Data represents 2 pixels.

Does that mean for an 8-bit Bitmap image, we have to define 256 entries in the color pallet? That sounds boresome. The answer is no. We don’t have to define all the entries, just that we save a maximum of 256 entries.

If we are adding fewer entries than maximum, then it’s our responsibility to set field value which should be equal to the number of actual entries in the color pallet. We also need to adjust the value accordingly by considering the size of the Color Pallet block.

Что такое BMP?

BMP — это формат растровых несжатых изображений, который был в большом ходу в начале 2000-х. BMP-формат был широко популярен из-за того, что при сохранении изображения в этом формате не производилось никаких операций по его сжатию, что положительно сказывалось на качестве изображения. Со временем формат потерял свою популярность. Появились новые вещи (вроде JPG или RAW), которые обеспечивали еще лучшее качество картинки при гораздо меньшем размере файла.

Растровый формат BMP был популярен еще и из-за того, что в него можно было сохранить изображение с какой угодно глубиной цвета. Именно поэтому сей формат до сих пор используется в «БИОСах» многих производителей. Лого «БИОСа», которое видно при старте компьютера выполнено как раз в этом формате. В некоторых играх сей формат тоже до сих пор используется, как основной. То есть, БМП до сих пор жив. А поэтому есть смысл подробнее разобрать его. Конечно, особо углубляться в теоретические дебри мы не будем, но основные особенности структуры разберем. Это совершенно необходимо.

Как преобразовать bmp формат в другие форматы

Иногда возникает необходимость преобразовать бмп-формат в популярные форматы. В этом случае используются специальные сервисы-конвертеры:

  • co/ru/bmp-jpg/;
  • com/ru/convert-format/bmp-to-pdf/;
  • online-convert.com/ru/convert-to-ico.

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

Итак, чтобы преобразовать в них bmp формат, загружаете туда картинку в данном формате. Далее выбираете на сервисе нужный формат для конвертации. После чего нажимаете кнопку «Начать конвертирование» или «Конвертация».

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

Чем открыть этот формат

Данный формат поддерживают множество приложений, как от сторонних разработчиков, так и от разработчиков Microsoft.

Вариант 1: FastStone Image Viewer

Это довольно известная утилита, позволяющая просматривать изображения.

  1. Открываем утилиту. Нажимаем на «Файл», а затем на «Открыть».

  2. Появляется новое окно, в котором необходимо выбрать нужный BMP-файл и щёлкнуть на «Открыть».

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

Вариант 2: IrfanView

  1. Запускаем утилиту. Кликаем на «Файл», а затем на «Открыть».

  2. В появившемся окне открытия сначала нужно переместиться в директорию с нужной картинкой, а затем выбрать ее нажав на «Открыть». Готово!

Вариант 3: XnView

  1. Включаем программу и нажимаем на «Файл», а затем на «Открыть».

  2. В новом окне находим нужный файл с изображением и нажимаем на кнопку «Открыть».

  3. Изображение открылось в новом окошке самой утилиты. Готово!

Вариант 4: Adobe Photoshop

Рассмотрим, как открыть данный формат в растровом графическом редакторе Фотошоп.

Заходим в Фотошоп и стандартно нажимаем «Файл» – «Открыть».

Отобразилось окно открытия. Находим нужное BMP-изображение и щёлкаем на «Открыть».

Появляется окно с информацией о том, что отсутствует внедренный цветовой профиль

Не обращаем на это внимание, ставим флажок на позицию «Оставить без изменений» и кликаем на кнопку «ОК». Готово! Изображение открылось.

Вариант 5: Gimp

  1. Заходим в программу и идем по следующему пути: «Файл»«Открыть».

  2. Находим необходимый фал и нажимаем на «Открыть».

  3. Готово! Изображение открылось в самой программе.

Данный вариант намного проще предыдущего, так как Гимп, в отличии от Фотошопа, является бесплатным графическим редактором.

Вариант 6: OpenOffice

  1. Запускаем бесплатный пакет OpenOffice. В меню программы нажимаем на кнопку «Открыть…».

  2. На экране появилось специальное окно поиска. Находим через него нужный файл с изображением, выбираем его и кликаем на кнопку «Открыть».

  3. Готово! Изображение открыто.

Вариант 7: Google Chrome

BMP-формат, также открывается различными браузерами.

  1. Заходим в Google Chrome. Зажимаем сочетание клавиш Ctrl+O.
  2. Появляется окно открытия, через которое находим изображение и кликаем на «Открыть».
  3. Готово! Рисунок появился в окошке самого браузера.

Вариант 8: Universal Viewer

  1. Запускаем универсальный просмотрщик изображений, а затем стандартно идем по пути: «Файл»«Открыть».

  2. Через окно поиска находим нужное изображение в данном формате и кликаем на кнопку «Открыть».

  3. Рисунок открылся.

Вариант 9: Paint

Стоит отметить, что изображение в и стандартными средствами операционной системы.

  1. Открываем «Пуск», переходим в «Стандартные», а затем заходим в Paint.

  2. Нажимаем на иконку, находящуюся левее кнопки «Главная».

  3. Кликаем на кнопку «Открыть».

  4. В новом окне находим файл с нужным изображением и кликаем на «Открыть».

  5. Картинка появилась в окне графического редактора. Готово!

Вариант 10: Средство просмотра фотографий Windows

  1. Заходим в папку с BMP-изображением и открываем «Проводник». Кликаем ПКМ по объекту и в появившемся меню выбираем «Открыть с помощью».
  2. Переходим на элемент «Просмотр фотографий Windows».

  3. Изображение появилось на экране. Готово!

Теперь Вы знаете огромное количество способов, при помощи которых можно открыть изображение BMP-формата.

Предыстория

Примерно в 1994 году разработчикам понадобился новый формат изображений, для использования в программных продуктах. Критерии были поставлены жесткие. Формат должен был работать с 256-цветной палитрой, обладать вменяемым размером. В скором времени был представлен формат BMP. Это было настоящим прорывом на то время. Он массово использовался практически везде. Даже в компании «Майкрософт», которая его и разработала.

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

Работаем с расширением на базе Windows

Если вы начинающий пользователь и не знаете чем открыть BMP формат для просмотра, конвертации и редактирования, то начните именно с этого списка.

Бесплатные

  • XnView
  • IrfanView
  • FastStone Image Viewer
  • Universal Viewer
  • JpegView

Платные

  • ACDSee
  • PhotoScape
  • Movavi пакетный фоторедактор
  • FastPictureViewer Pro

Какую из них выбрать лучше всего? Начните с IrfanView или XnView. Это бесплатные просмотрщики изображений, которые в принципе очень схожи, но тем не менее небольшая разница присутствует. Что теперь необходимо сделать?

  • Скачиваем программу;
  • Устанавливаем;
  • Делаем ассоциацию форматов.

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

Какие возможности доступны еще?

  • Убрать красные глаза;
  • Обрезка, поворот;
  • Изменение даты съемки;
  • Уменьшение и увеличение размера;
  • Добавление водяной печати и рамки;
  • Коррекция цветов;
  • Повышение резкости;
  • Наложение эффектов (пикселизация, размытие, тиснение и т.д.);
  • Работа с панорамными фото и т.п.

Доступна поддержка плагинов, которые выполняют широкий спектр задач:

  • Чтение файлов Djvu;
  • Воспроизведение видео и mp3;
  • Определение лиц;
  • Фильтры Photoshop;
  • Создание презентаций в .EXE или .SCR;
  • Захват экрана и т.д.

Использование конвертеров

Одним из самых простых способов, позволяющих перевести в формат BMP картинку другого типа, не говоря уже об использовании стандартных средств Windows и графических редакторов, является применение специализированных конвертеров, которые работают в автоматическом режиме.

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

Кстати, то же самое касается и обратного процесса, когда требуется преобразовать BMP-формат в какой-либо другой.

При всем множестве программ такого направления в Интернете можно найти немало ресурсов, позволяющих осуществлять такие преобразования в режиме онлайн. Только в данном случае пользователь загружает файлы на сайт, выбирает конечный формат, после чего скачивает результат себе на компьютер. Согласитесь, по сравнению с первыми двумя способами, не очень удобно.

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

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

Fast Image Viewer

  • доступно для скачивания в Google Play;
  • разработчик: 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 и другие).

Приложение Image Viewer заменяет галерею и имеет расширенный функционал

Photo Viewer

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

Photo Viewer — это приложение для удобного просмотра изображений на смартфоне. Программа имеет очень простой и интуитивный интерфейс, который поймёт каждый. Поддержка основных форматов: JPG, BMP, GIF, TIFF, PNG. Для работы приложение потребляет минимум энергии, что также является плюсом.

Приложение Photo Viewer — удобный инструмент просмотра изображений на Android

Открыть файлы с расширением bmp на устройствах Андроид очень просто. Достаточно установить всего одно приложение для просмотра картинок с расширенными API-функциями для чтения всех форматов изображений.

Пять шагов для открытия файлов BMP

Если у вас есть файлы BMP, которые нужно открыть, но вы не знаете, как это сделать, выполните следующие действия.

Установить необязательные продукты — File Magic (Solvusoft) | EULA | Privacy Policy | Terms | Uninstall

Шаг 1: Дважды щелкните файл.

Найдите значок файла BMP и дважды щелкните его. Если у вас установлена ​​правильная программа, она должна открывать файл автоматически. Если это не так, перейдите к шагу 2.

Шаг 2: Ищите другую программу.

Если файл BMP не открывается при двойном щелчке по нему, у вас, вероятно, нет нужной программы на вашем компьютере. Существует несколько популярных программ, которые можно использовать для открытия файла BMP. Попробуйте использовать одну из трех наиболее распространенных программ: Infinity Game Engine Palette Information, Award AWBM BIOS Bitmap или Windows OS/2 Bitmap Graphics.

Шаг 3: Проверьте тип файла.

Если ни одна из вышеперечисленных программ не откроет ваш файл BMP, проверьте тип файла, чтобы убедиться, что у вас есть программа, которая может открыть этот тип файла. Большинство файлов BMP составляют Raster Image Files, но есть шанс, что это может быть другой тип.

Вы можете найти эту информацию в свойствах файла. На компьютере с Windows просто щелкните файл правой кнопкой мыши и щелкните свойства и найдите тип файла в разделе «Тип файла». На компьютере Mac щелкните правой кнопкой мыши файл и нажмите «Дополнительная информация» и найдите тип файла в разделе «Вид».

Шаг 4: Получите помощь от разработчика.

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

Название программы Имя разработчика
Infinity Game Engine Palette Information BioWare Corp.
Award AWBM BIOS Bitmap Phoenix Technologies LTD
Windows OS/2 Bitmap Graphics PC Software Company

Шаг 5: Найти универсальный просмотрщик файлов.

Самый простой способ открыть файл BMP или любой файл — использовать универсальный просмотрщик файлов, например File Magic (Download). Вы можете использовать его, чтобы открыть много разных форматов файлов. Если он несовместим, файл будет просто открыт в двоичном формате.

Рекомендуем

Установить необязательные продукты — File Magic (Solvusoft) | EULA | Privacy Policy | Terms | Uninstall

Открывает все ваши файлы, какМАГИЯ! 1

Установить необязательные продукты — File Magic (Solvusoft)EULA | Privacy Policy | Terms | Uninstall

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

Немного о формате

Представленный ниже код несколько отличается от итогового. Сделано это для того, чтобы читателю было проще понять алгоритм работы программы.

Шапка

В первых 14 байтах располагается «шапка» файла. Перед любыми действиями, следует сверить формат открытого файла с необходимым нам, для этого нужно прочитать первые 2 байта и сравнить их с 0x4D42. Больше информация из «шапки» нам не понадобится.

Заголовок

После «шапки» идёт заголовок с информацией о bitmap файле. В первых 2 байтах находятся данные о длине этого заголовка, эту информацию также можно использовать для определения версии формата. Также нам понадобится информация о высоте и ширине изображения, количестве бит на один пиксель и цветовые маски.

Чтение файла

Читать файл нужно последовательно и побайтово. Для удобного осуществления этого подойдёт следующая шаблонная функция:

template <typename Type>
void read(std::ifstream &fp, Type &result, std::size_t size) {
    fp.read(reinterpret_cast<char*>(&result), size);
}
Отступ

Одной из особенностей bmp формата является то, что количество байт в строке обязательно должно быть кратно 4, недостающие пиксели добавляются в конец каждого пиксельного ряда. То есть, если наше изображение имеет 24 бита на пиксель и ширину 2 пикселя, то, так как 24 * 2 бита — это 6 байт (48 / 8 бит = 6 байт), полученный отступ будет равняться 2 байтам. Определить размер отступа можно следующим образом:

int padding = ((4 - (width * (bitCount  8)) % 4) & 3;
Цветовая маска

Если открываемый файл имеет версию формата 2 или выше, то у него, возможно, установлена цветовая маска. Если это не так, то нужно установить маску цвета по умолчанию:

int colorsCount = bitCount >> 3;
if (colorsCount < 3) {
    colorsCount = 3;
}
 
int bitsOnColor = bitCount  colorsCount;
int maskValue = (1 << bitsOnColor) - 1;
 
if (redMask ==  || greenMask ==  || blueMask == ) {
    redMask = maskValue << (bitsOnColor * 2);
    greenMask = maskValue << bitsOnColor;
    blueMask = maskValue;
}

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

Функция извлечения битов будет выглядеть таким образом:

unsigned char bitextract(const unsigned int byte, const unsigned int mask) {
    if (mask == ) {
        return ;
    }
 
    // определение количества нулевых бит справа от маски
    int
        maskBufer = mask,
        maskPadding = ;
 
    while (!(maskBufer & 1)) {
        maskBufer >>= 1;
        maskPadding++;
    }
 
    // применение маски и смещение
    return (byte & mask) >> maskPadding;
}

Код записи будет выглядеть таким образом:

unsigned int bufer;
read(fileStream, bufer, bitCount  8);
 
rgbRed = bitextract(bufer, biRedMask);
rgbGreen = bitextract(bufer, biGreenMask);
rgbBlue = bitextract(bufer, biBlueMask);
rgbReserved = bitextract(bufer, biAlphaMask);

Какими программами открыть 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;
  • Photoshop CS6.

Под операционной системой Linux bmp также открывает приложение GIMP.

История

Эта история изначально не являлась крипи и имеет вполне реальное происхождение. Однако многие её события были утрачены за давностью лет, оставляя место только легенде, красивой и страшной…

Всё началось в теперь уже далёком 1992 году в одном небольшом американском городке. Там проживал человек, который долгие годы интересовался загадкой Атлантиды. Всю свою жизнь он собирал литературу, фотографии и фильмы, посвящённые этому вопросу. Не будучи образованным историком или археологом (по некоторым данным он работал автослесарем), он тем не менее знал об этой загадке чуть ли не больше, чем учёные мужи.

Все свои свободные средства этот любитель-исследователь тратил на артефакты (описание или фото), касающиеся исчезнувшего континента. И однажды ему в руки попала фотография некой каменной стелы с необычным узором. В течении долгих лет он изучал этот узор, пока в 1998 году не пришёл к выводу, что на стеле изображён «календарь атлантов». При помощи знакомого программиста он сделал программу, воспроизводящую алгоритм календаря и воссоздал благодаря компьютерной графики этот самый «календарь». В итоге получился небольшой графический файл Atla.bmp.

Это небольшое рельефное изображение некой мозаики, состоящей из чёрточек разной толщины и структуры, расположенных под прямым углом друг к другу. По утверждению автора — эти чёрточки, графический код математического закона, к которому может быть сведено любое событие нашего мира. То есть — при помощи этого «календаря» возможно предсказать любое событие…

Странно, но это тот самый редкий случай, когда информацию, которой поделился этот человек не осмеяли, а заинтересовались видные математики и учёные. Результат их изысканий так и остался неизвестным, но в 1999 году исследователь Атлантиды выложил графическое изображение «календаря» в сеть.

Именно тогда пользователи стали замечать странные стечения обстоятельств, происходившие с ними после изучения, просмотра или попытки расшифровки «календаря». Некоторые стали утверждать, что им казалось, как-будто через сетку на них смотрит загадочное лицо с вытянутым черепом. Многие его замечали только после длительного просмотра изображения. А когда видели, испытывали страх, состояние оцепенения (как при гипнозе).

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

История получила продолжение в 2004 году, когда некий молодой математик из Европы стал утверждать в сети, что расшифровал код «календаря» и знает или может узнать ход любого события в нашем мире. Через две недели после его первого сообщения, где предсказал точное число банкротства сети известных магазинов одежды, он должен был дать интервью местному каналу телевидения. Но за пару дней до этого был убит выстрелом в голову при выходе из своего дома. Примечательно, что его жильё было взломано и перевёрнуто вверх дном. А все материалы, касающиеся исследования «календаря», исчезли. Убийство не раскрыто и по сей день.

Заключение

Вот вкратце и все, что можно сказать о формате графики BMP. По понятным причинам техническая сторона вопроса в плане структуры файла не рассматривалась. Рядовому юзеру такие данные вряд ли что-то скажут.

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

Заключение

Итак, мы рассмотрели BMP-формат. Он был популярен тогда, когда компьютеры только входили в массовый сегмент. Многие использовали его только потому, что альтернатив не было. Хотя уже тогда он далеко не всех устраивал. «БМП» безнадежно устарел. Он уже не выдерживает конкуренции с такими популярными форматами, как JPG или PNG. Тем не менее, его еще используют в некоторых сферах. И именно потому, что его структура неоднородна. Для нужд разработчиков иногда требуется формат изображения, который может поддерживать сразу несколько слоев информации. Альтернативой является PSD (стандартный формат «Фотошопа»), но он слишком уж тяжелый. Долго открывается в обычном «вьювере». Теперь только профессионалы используют «БМП». И хорошо. Ему уже нет места на обычном домашнем компьютере. Есть форматы намного интереснее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector