Браузеры. Восстановление. Windows. Оптимизаторы. Антивирус

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

Что еще может вызвать проблемы?

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

Вы хотите помочь?

Если у Вас есть дополнительная информация о расширение файла BMP мы будем признательны, если Вы поделитесь ею с пользователями нашего сайта. Воспользуйтесь формуляром, находящимся и отправьте нам свою информацию о файле BMP.

Объявление

Формат файлов BMP Raster image

BMP (файл растрового изображения, растровый формат файла, независимый от устройства, растровое изображение) - файлы растрового изображения, используемые для хранения цифровых растровых изображений отдельно от устройства отображения. Этот тип файлов ранее использовался в Microsoft Windows и OS/2. Термин "растровый" восходит к идее программистов о карте битов. Изображения BMP, как правило, не сжимаются или сжимаются без потерь (например, с помощью ZIP или RAR – благодаря наличию в файле избыточных данных). Сегодня JPG является более предпочтительным форматом изображений - в основном из-за большого размера файла BMP, что может вызвать проблемы или задержки при загрузке, отправке или выгрузке файлов.

Технические сведения о файлах BMP

Файлы BMP хранятся в виде 2D-изображений различных размеров, цветов и значений глубины цвета без сжатия данных, цветовых профилей или альфа-каналов. Изображения BMP сохраняются в форматах аппаратно-независимых растровых изображений (DIB), то есть для изображения указаны цвета, а не технические характеристики системы. Это объясняет, почему некоторые изображения BMP на разных компьютерах выглядят по-разному. Изображения BMP можно просматривать на любом устройстве, в том числе на компьютерных и телевизионных экранах. Отсутствие патентов превратило этот тип изображения в популярный формат для широкого спектра устройств.

Дополнительная информация о формате BMP

BMP (от англ. Bitmap Picture ) - формат хранения растровых изображений , разработанный компанией Microsoft.

С форматом BMP работает огромное количество программ, так как его поддержка интегрирована в операционные системы Windows и OS/2 . Файлы формата BMP могут иметь расширения.bmp , .dib и.rle . Кроме того, данные этого формата включаются в двоичные файлы ресурсов RES и в PE-файлы .

Компания Microsoft так же разработала для своих нужд форматы ICO и CUR, которые имеют похожую на BMP структуру. Кроме этого, структуры из этого формата используются некоторыми WinAPI-функциями подсистемы GDI .

Глубина цвета в данном формате может быть 1, 2, 4, 8, 16, 24, 32, 48 бит на пиксель , но глубина 2 бита на пиксель официально не поддерживается. При этом для глубины цвета меньше 16 бит используется палитра с полноцветными компонентами глубиной 24 бита.

В формате BMP изображения могут храниться как есть или же с применением некоторых распространённых алгоритмов сжатия. В частности, формат BMP поддерживает RLE -сжатие без потери качества, а современные операционные системы и программное обеспечение позволяют использовать JPEG и PNG (эти форматы встраиваются в BMP как в контейнер).

Расширение файла .bmp
Категория файлов
Файл-пример (2,7 MiB)
(487,85 KiB)
Связанные программы Adobe Photoshop
MS Paint
Microsoft Photo Editor
Paintbrush

DIB и DDB

При использовании формата DIB (англ. Device Independent Bitmap , аппаратно-независимый растр) программист может получить доступ ко всем элементам структур, описывающих изображение, при помощи обычного указателя. Но эти данные не используются для непосредственного управления экраном, так как они всегда хранятся в системной памяти, а не в специализированной видеопамяти . Формат пикселя в оперативной памяти может отличаться от того формата, который должен заноситься в видеопамять для индикации точки такого же цвета. Например, в DIB-формате может использоваться 24 бита для задания пикселя, а графический адаптер в этот момент может работать в режиме HiColor с цветовой глубиной 16 бит. При этом ярко-красная точка в аппаратно-независимом формате будет задаваться тремя байтами 0x0000ff, а в видеопамяти - словом 0xF800. При копировании картинки на экран система будет тратить дополнительное время на преобразование кодов цвета из 24-битного формата в формат видеобуфера.

Обзор структуры файла

BMP-файл состоит из четырёх частей:

  1. Заголовок файла (BITMAPFILEHEADER)
  2. Заголовок изображения (BITMAPINFOHEADER, может отсутствовать). BITMAPV4HEADER (Win95, NT4.0) BITMAPV5HEADER (Win98/Me, 2000/XP)
  3. Палитра (может отсутствовать)
  4. Само изображение

BITMAPFILEHEADER

Эта структура содержит информацию о типе, размере и представлении данных в файле. Размер 14 байт.

Typedef struct tagBITMAPFILEHEADER { WORD bfType; // смещение 0 байт от начала файла DWORD bfSize; // смещение 2 байта от начала файла, длина 4 байта WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; // смещение 10 байт от начала файла, длина 4 байта } BITMAPFILEHEADER, * PBITMAPFILEHEADER;

Тип WORD должен иметь размер 16 бит , типы DWORD и LONG - 32 бита, тип LONG - знаковый, порядок байтов подразумевается little endian .

  • bfType - тип файла, символы «BM» (в HEX: 0x42 0x4d).
  • bfSize - размер всего файла в байтах .
  • bfReserved1 и bfReserved2 - зарезервированы, должны содержать нули.
  • bfOffBits - содержит смещение в байтах от начала структуры BITMAPFILEHEADER до непосредственно битов изображения.

После заголовка файла

BITMAPINFOHEADER

Наиболее простой вариант заголовка. Приложения для Windows NT3.51 и более ранних могут использовать только эту структуру. Размер 40 байт.

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 Размер данной структуры в байтах. Формат BMP со временем дополнялся и по значению этого поля определяется версия формата. biWidth Ширина изображения в пикселях. Для Win98/Me и Win2000/XP: если поле biCompression содержит BI_JPEG или BI_PNG, здесь указана ширина распакованного изображения. biHeight Высота изображения в пикселях. Если содержит положительное значение - изображение записано в порядке снизу-вверх (нулевой пиксель в нижнем левом углу). Если значение отрицательное - изображение записано сверху-вниз (нулевой пиксель в верхнем левом углу изображения). Поле biCompression должно содержать значение BI_RGB или BI_BITFIELDS. Такое изображение не может быть сжато. biPlanes Количество цветовых плоскостей и в формате BMP содержит единицу. biBitCount Количество бит на пиксель. Может принимать следующие значения:

  • 0 - имеет смысл для Win98/Me/2000/XP. Число бит на пиксель определяет формат JPEG или PNG.
  • 1 - изображение монохромное. Член bmiColors структуры BITMAPINFO содержит два элемента. Каждый бит изображения представляет один пиксель; если бит равен нулю - пиксель имеет цвет первого элемента таблицы bmiColors, иначе - цвет второго.
  • 4 - шестнадцатицветное изображение. Пиксели определяются 4-х битными индексами, каждый байт изображения содержит информацию о двух пикселях - старшие 4 бита для первого, оставшиеся - для второго.
  • 8 - в палитре содержится до 256 цветов, каждый байт изображения хранит индекс в палитре для одного пикселя.
  • 16 - если поле biCompression содержит значение BI_RGB, файл не содержит палитры. Каждые два байта изображения хранят интенсивность красной, зелёной и синей компоненты одного пикселя. При этом старший бит не используется, на каждую компоненту отведено 5 бит: 0RRRRRGGGGGBBBBB.
    Если поле biCompression содержит значение BI_BITFIELDS, палитра хранит три четырёхбайтовых значения, определяющих маску для каждой из трёх компонент цвета. Каждый пиксель изображения представлен двухбайтным значением, из которого с помощью масок извлекаются цветовые компоненты. Для WinNT/2000/XP - последовательности бит каждой компоненты должны следовать непрерывно, не перекрываясь и не пересекаясь с последовательностями других компонент. Для Win95/98/Me - поддерживаются только следующие маски: 5-5-5, где маска синей компоненты 0х001F, зелёной 0x03E0, красной 0x7C00; и 5-6-5, где маска синей компоненты 0x001F, зелёной 0x07E0, красной 0xF800.
  • 24 - палитра не используется, каждая тройка байт изображения представляет один пиксель, по байту для интенсивности синего, зелёного и красного канала соответственно.
  • 32 - Если поле biCompression содержит значение BI_RGB, изображение не содержит палитры. Каждые четыре байта изображения представляют один пиксель, по байту для интенсивности синего, зелёного и красного канала соответственно. Старший байт каждой четвёрки обычно не используется, однако позволяет хранить данные альфа-канала.
    Если поле biCompression содержит значение BI_BITFIELDS, в палитре хранятся три четырёхбайтных цветовых маски - для красной, зелёной и синей компоненты. Каждый пиксель изображения представлен четырьмя байтами. WinNT/2000: маски компонент не должны перекрываться или пересекаться. Windows 95/98/Me: система поддерживает только один режим сжатия, полностью аналогичный режиму без компрессии BI_RGB - старший байт каждой четвёрки используется в качестве альфа-канала, следующие три отведены для синего, зелёного и красного канала соответственно: 0xAARRGGBB.
biCompression Тип сжатия для сжатых изображений:
Значение Идентификатор Компрессия
0 BI_RGB несжатое изображение
1 BI_RLE8 сжатие RLE для 8-битных изображений
2 BI_RLE4 сжатие RLE для 4-битных изображений
3 BI_BITFIELDS изображение не сжато, палитра содержит три 4-байтные маски для красной, зелёной и синей компонент цвета. Используется для 16- и 32-битных изображений
4 BI_JPEG Win98/Me/2000/XP: JPEG -сжатие
5 BI_PNG Win98/Me/2000/XP: PNG -сжатие
6 BI_ALPHABITFIELDS WinCE: изображение не сжато, палитра содержит четыре 4-байтные маски для красной, зелёной, синей и прозрачной (альфа-канал) компонент цвета. Используется для 16- и 32-битных изображений
biSizeImage Размер изображения в байтах. Может содержать ноль для BI_RGB-изображений. Win98/Me/2000/XP: если biCompression содержит BI_JPEG или BI_PNG, biSizeImage указывает размер BI_JPEG или BI_PNG буфера изображения. biXPelsPerMeter Горизонтальное разрешение в пикселях на метр для целевого устройства. Приложение может использовать это значение для выбора из группы ресурсов изображения, наиболее подходящего для текущего устройства. Для DPI 96, которое принято в Microsoft для мониторов, оно будет равно 3780 (если считать по формуле (96 / 25,4) * 1000). biYPelsPerMeter Вертикальное разрешение в пикселях на метр для целевого устройства. biClrUsed Количество используемых цветовых индексов в палитре. Если значение равно нулю - изображение использует максимально доступное количество индексов, в соответствии со значением biBitCount и методом сжатия, указанным в biCompression.
Если содержит ненулевое значение и biBitCount меньше 16, biClrUsed указывает количество цветов, к которым будет обращаться драйвер устройства или приложение. Если biBitCount больше или равен 16, biClrUsed размер палитры, используемой для оптимизации работы системных палитр. Если biBitCount равен 16 или 32, оптимальная палитра следует сразу после трёх четырёхбайтных масок.
В упакованном изображении массив пикселей следует сразу после структуры BITMAPINFO, biClrUsed должен содержать ноль, либо реальный размер палитры. biClrImportant Количество элементов палитры, необходимых для отображения изображения. Если содержит ноль - все индексы одинаково важны.

Структура BITMAPINFO объединяет BITMAPINFOHEADER и палитру, предоставляя полное описание размеров и цветов изображения.

Чтобы найти палитру в структуре BITMAPINFO, приложение должно использовать информацию, хранимую в biSize, следующим образом:

PColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo-> bmiHeader.biSize ) ) ;

Растр обычно хранится в вертикально зеркальном виде. Но есть также возможность хранить растр не в вертикально зеркальном виде. Признак того, что растр в BMP не в вертикально зеркальном виде задаётся параметром biHeight.

BITMAPV4HEADER

Расширенная версия описанной выше структуры. Win NT 3.51 и более ранние должны использовать структуру BITMAPINFOHEADER. Win98/Me/2000/XP могут использовать вместо структуры BITMAPV4HEADER структуру BITMAPV5HEADER.

Typedef struct { DWORD bV4Size; LONG bV4Width; LONG bV4Height; WORD bV4Planes; WORD bV4BitCount; DWORD bV4V4Compression; DWORD bV4SizeImage; LONG bV4XPelsPerMeter; LONG bV4YPelsPerMeter; DWORD bV4ClrUsed; DWORD bV4ClrImportant; DWORD bV4RedMask; DWORD bV4GreenMask; DWORD bV4BlueMask; DWORD bV4AlphaMask; DWORD bV4CSType; CIEXYZTRIPLE bV4Endpoints; DWORD bV4GammaRed; DWORD bV4GammaGreen; DWORD bV4GammaBlue; } BITMAPV4HEADER, * PBITMAPV4HEADER;

Поля от начала структуры и до bV4ClrImportant включительно имеют то же назначение, что и соответствующие поля структуры BITMAPINFOHEADER.

  • bV4RedMask - цветовая маска красной компоненты каждого пикселя, используется только если bV4Compression содержит значение BI_BITFIELDS.
  • bV4GreenMask - цветовая маска зелёной компоненты каждого пикселя, используется только если bV4Compression содержит значение BI_BITFIELDS.
  • bV4BlueMask - цветовая маска синей компоненты каждого пикселя, используется только если bV4Compression содержит значение BI_BITFIELDS.
  • bV4AlphaMask - маска, определяющая компоненту альфа-канала.
  • bV4CSType - определяет цветовое пространство изображения.
  • bV4Endpoints - структура CIEXYZTRIPLE, указывающая x, y и z координаты трёх цветов, которые соответствуют конечным точкам(endpoints) цветового пространства, определённого для изображения. Это поле игнорируется, если bV4CSType не содержит значения LCS_CALIBRATED_RGB.
  • bV4GammaRed - кривая тона красной компоненты. Игнорируется, если bV4CSType не содержит значения LCS_CALIBRATED_RGB. Указывается в формате 16×16.
  • bV4GammaGreen - кривая тона зелёной компоненты. Игнорируется, если bV4CSType не содержит значения LCS_CALIBRATED_RGB.
  • bV4GammaBlue - кривая тона синей компоненты. Игнорируется, если bV4CSType не содержит значения LCS_CALIBRATED_RGB.

BITMAPV5HEADER

Win95/NT 4.0: приложения могут использовать BITMAPV4HEADER. Win NT 3.51 и более ранние должны использовать структуру BITMAPINFOHEADER.

Typedef struct { DWORD bV5Size; LONG bV5Width; LONG bV5Height; WORD bV5Planes; WORD bV5BitCount; DWORD bV5Compression; DWORD bV5SizeImage; LONG bV5XPelsPerMeter; LONG bV5YPelsPerMeter; DWORD bV5ClrUsed; DWORD bV5ClrImportant; DWORD bV5RedMask; DWORD bV5GreenMask; DWORD bV5BlueMask; DWORD bV5AlphaMask; DWORD bV5CSType; CIEXYZTRIPLE bV5Endpoints; DWORD bV5GammaRed; DWORD bV5GammaGreen; DWORD bV5GammaBlue; DWORD bV5Intent; DWORD bV5ProfileData; DWORD bV5ProfileSize; DWORD bV5Reserved; } BITMAPV5HEADER, * PBITMAPV5HEADER;

Для полей от начала структуры и до bV5GammaBlue включительно будут описаны только отличия от предыдущих версий - BITMAPINFOHEADER и BITMAPV4HEADER.

  • bV5CSType - определяет цветовое пространство изображения, может принимать следующие значения:
LCS_CALIBRATED_RGB LCS_sRGB LCS_WINDOWS_COLOR_SPACE PROFILE_LINKED PROFILE_EMBEDDED
  • bV5Intent - может принимать следующие значения:
LCS_GM_ABS_COLORIMETRIC LCS_GM_BUSINESS LCS_GM_GRAPHICS LCS_GM_IMAGES
  • bV5ProfileData - смещение в байтах от начала структуры к началу данных профиля (имя файла профиля, строка состоящая исключительно из символов кодовой таблицы 1252 и заканчивающаяся нулевым байтом). Игнорируется, если bV5CSType содержит значение, отличное от PROFILE_LINKED и PROFILE_EMBEDDED.
  • bV5ProfileSize - размер данных профиля в байтах.
  • bV5Reserved - зарезервировано. Содержит ноль.

Палитра

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

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

Файл BMP может не содержать палитры, если в нём хранится несжатое полноцветное изображение.

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

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

В bmp-файлах с глубиной цвета 24 бита, байты цвета каждого пикселя хранятся в порядке BGR (Blue,Green,Red)

B bmp-файлах с глубиной цвета 32 бита, байты цвета каждого пикселя хранятся в порядке BGRA (Blue,Green,Red,Alpha)

Битность изображения

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

  • 1 бит - монохромное изображение (два цвета).
  • 2 бита - 4 возможных цвета (режимы работы CGA) (2-битовый режим официально не стандартизован, но используется).
  • 4 бита - 16-цветное изображение (режимы работы EGA).
  • 8 бит (1 байт) - 256 цветов, последний из режимов, поддерживавших индексированные цвета (см. ниже).
  • 16 бит (2 байта) - режим HiColor, Для 5-6-5 = 65536 возможных оттенков, для 5-5-5 = 32768 возможных оттенков.
  • 24 бита (3 байта) - TrueColor . В связи с тем, что 3 байта не очень хорошо соотносятся со степенями двойки (особенно при хранении данных в памяти, где выравнивание данных по границе слова имеет значение), вместо него часто используют 32-битное изображение. В режиме TrueColor на каждый из трёх каналов (в режиме RGB) отводится по 1 байту (256 возможных значений), общее количество цветов равно .
  • 32 бита (4 байта) - этот режим практически аналогичен TrueColor, четвёртый байт обычно не используется, или в нём располагается альфа-канал (прозрачность).
  • 48 бит (6 байт) - редко используемый формат с повышенной точностью передачи цвета (16 бит на канал), поддерживается относительно малым количеством программ и оборудования.

Индексированные цвета

При количестве бит 1 (2 цвета), 2 (4 цвета), 4 (16 цветов) или 8 (256 цветов) на каждый пиксель, может использоваться специальный режим индексированных цветов . В этом случае число, соответствующее каждому пикселю, указывает не на цвет, а на номер цвета в палитре. Благодаря использованию палитры имеется возможность адаптировать изображение к цветам, присутствующим на изображении. В таком случае изображение ограничено не заданными цветами, а максимальным количеством одновременно используемых цветов.

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

Следующая программа открывает 24 битный BMP файл в окне XWindow, глубина цвета должна составлять 32 бита, на меньшей цветопередаче не работает, так как это усложняет пример:

/* Компилируется строкой: cc -o xtest xtest.c -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 -lm */ #include #include #include #include #include #include #include #include #include #include #include #include "bitmap.h" /* Здесь определения заголовков BMP как было описано выше в этой статье */ static XImage * CreateImageFromBuffer(Display*, unsigned char *, int , int ) ; main(int argc, char * argv ) { Display * dis; Window win; /* Наше окно */ XEvent event; /* События */ GC gc; /* Графический контекст */ XImage * image; int n, width, height, fd, size; unsigned char * data; BITMAPFILEHEADER bmp; BITMAPINFOHEADER inf; char * buf; if (argc < 2 ) { perror ("use: xtest file.bmp\n " ) ; exit (1 ) ; } if ((fd = open(argv[ 1 ] , O_RDONLY) ) == - 1 ) { printf ("Error open bitmap\n " ) ; exit (1 ) ; } read(fd, & bmp, sizeof (BITMAPFILEHEADER) ) ; read(fd, & inf, sizeof (BITMAPINFOHEADER) ) ; width = inf.biWidth ; height = inf.biHeight ; if ((dis = XOpenDisplay(getenv ("DISPLAY" ) ) ) == NULL) { printf ("Can"t connect X server: %s\n " , strerror (errno) ) ; exit (1 ) ; } win = XCreateSimpleWindow(dis, RootWindow(dis, DefaultScreen(dis) ) , 0 , 0 , width, height, 5 , BlackPixel(dis, DefaultScreen(dis) ) , WhitePixel(dis, DefaultScreen(dis) ) ) ; XSetStandardProperties(dis, win, argv[ 1 ] , argv[ 0 ] , None, argv, argc, NULL) ; gc = DefaultGC(dis, DefaultScreen(dis) ) ; /* Иногда в структуре это место не заполнено */ if (inf.biSizeImage == 0 ) { /* Вычислим размер */ size = width * 3 + width % 4 ; size = size * height; } else { size = inf.biSizeImage ; } buf = malloc (size) ; if (buf == NULL) { perror ("malloc" ) ; exit (1 ) ; } printf ("size = %d байтов выделено\n " , size) ; /* Сместимся на начало самого изображения */ lseek(fd, bmp.bfOffBits , SEEK_SET) ; /* Читаем в буфер */ n = read(fd, buf, size) ; printf ("size = %d байт прочитано\n " , n) ; image = CreateImageFromBuffer(dis, buf, width, height) ; /* Удалим буфер - он нам больше не нужен */ free (buf) ; XMapWindow(dis, win) ; XSelectInput(dis, win, ExposureMask | KeyPressMask) ; while (1 ) { XNextEvent(dis, & event) ; if (event.xany .window == win) { switch (event.type ) { case Expose: XPutImage(dis, win, gc, image, 0 , 0 , 0 , 0 , image-> width, image-> height) ; break ; case KeyPress: if (XLookupKeysym(& event.xkey , 0 ) == XK_q) { XDestroyImage(image) ; XCloseDisplay(dis) ; close(fd) ; exit (EXIT_SUCCESS) ; } break ; default : break ; } } } } /* Создает Ximage из файла BMP, так как изображение BMP хранится первернутым * и зеркальным-в цикле это исправляется */ XImage * CreateImageFromBuffer(Display * dis, unsigned char * buf, int width, int height) { int depth, screen; XImage * img = NULL; int i, j; int numBmpBytes; size_t numImgBytes; int32_t * imgBuf; int ind = 0 ; int line; int temp; int ih, iw; /* Номера строки и столбца для отражения */ int new_ind; /* Новый индекс */ screen = DefaultScreen(dis) ; depth = DefaultDepth(dis, screen) ; temp = width * 3 ; line = temp + width % 4 ; /* Длина строки с учетом выравнивания */ numImgBytes = (4 * (width * height) ) ; imgBuf = malloc (numImgBytes) ; /* Размер, отведенный на BMP в файле с учетом выравнивания */ numBmpBytes = line * height; for (i = 0 ; i < numBmpBytes; i++ ) { unsigned int r, g, b; /* Пропускаем padding */ if (i >= temp && (i % line) >= temp) continue ; b = buf[ i] ; i++; g = buf[ i] ; i++; r = buf[ i] ; /* Вычисляем новый индекс для отражения по вертикали */ iw = ind % width; ih = ind / width; new_ind = iw + (height - ih - 1 ) * width; imgBuf[ new_ind] = (r | g << 8 | b << 16 ) << 8 ; ind++; } img = XCreateImage(dis, CopyFromParent, depth, ZPixmap, 0 , (char * ) imgBuf, width, height, 32 , 0 ) ; XInitImage(img) ; /* Порядок битов и байтов на PC должен быть таким */ img-> byte_order = MSBFirst; img-> bitmap_bit_order = MSBFirst; return img; }

Формат файла BMP (сокращенно от BitMaP) - это "родной" формат растровой графики для Windows, поскольку он наиболее близко соответствует внутреннему формату Windows, в котором эта система хранит свои растровые массивы. Для имени файла, представленного в BMP-формате, чаще всего используется расширение BMP, хотя некоторые файлы имеют расширение RLE, означающее run length encoding (кодирование длины серий). Расширение RLE имени файла обычно указывает на то, что произведено сжатие растровой информации файла одним из двух способов сжатия RLE, которые допустимы для файлов BMP-формата.

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

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

Операционная система 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 и другие).

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: