Как сделать файл bmp монохромный

Обновлено: 08.07.2024

Эта статья про то, как выглядит графический формат bmp. Хоть это и один из простых форматов, но из-за того, что существует много вариаций этого формата, то не все моменты очевидны. Итак, хватит лить воду, начнем.

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

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

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

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

typedef struct tagBITMAPFILEHEADER
<
WORD bfType ;
DWORD bfSize ;
WORD bfReserved1 ;
WORD bfReserved2 ;
DWORD bfOffBits ;
> BITMAPFILEHEADER, * PBITMAPFILEHEADER ;

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

Здесь и далее будем считать, что переменная bfh объявлена как BITMAPFILEHEADER bfh;

А дальше идет структура BITMAPINFOHEADER, которая объявлена так:

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, которая описана так:

typedef struct tagRGBQUAD
<
BYTE rgbBlue ;
BYTE rgbGreen ;
BYTE rgbRed ;
BYTE rgbReserved ;
> 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, то есть и получается тот самый один килобайт.

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

biBitCountФормула на С
8(3 * Width) % 4
16(2 * Width) % 4
24Width % 4

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

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

Привет 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, 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 ;
>

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

Источники

  1. Д. Гончаров, Т. Салихов. "DirectX 7.0 для программистов"
  2. MSDN

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

Что такое файл BMP

Часть 1. Что такое файл BMP

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

Заголовок файла сообщает вам и вашему фоторедактору размер изображения, ширину, высоту, параметры цвета, а также информацию о том, где должны быть расположены пиксели растрового изображения в сетке. Вообще говоря, файлы BMP хранят только цифровые 2D-изображения с разными разрешениями и размерами. Это могут быть цветные изображения или монохромные изображения.

Минусы и плюсы файла BMP

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

  1. Доступно для большинства устройств Windows, Mac, iOS и Android.
  2. Легко готово и совместимо с большинством редакторов изображений.
  3. Поддержка различной глубины цвета, альфа-каналов, цветовых профилей и т. Д.
  4. Не сжимать, это причина превосходного качества изображений BMP.
  5. Хорошо работают с устройствами вывода на пинту.
  6. Поддержка сжатия без потерь.

Имейте в виду, что JPG и GIF также являются растровыми изображениями, но они используют алгоритмы сжатия изображений для уменьшения размера файла. Имеет смысл, что они лучше работают в Интернете, чем BMP. Что касается размера файла, PNG также является форматом изображений без потерь, но значительно меньше по размеру. Для печати изображения TIFF более гибкий, чем BMP.

Определение BMP

Часть 2: Как открывать и управлять BMP

BMP легко просматривать и открывать на различных устройствах, но он имеет очень большой размер файла. Какой должна быть лучшая программа просмотра и управления BMP, чтобы открывать фотографии, проверять детали или даже управлять форматами фотографий и видео? WidsMob Viewer Pro - это универсальный просмотрщик, конвертер и менеджер фотографий BMP, который позволяет просматривать файлы BMP в различных режимах, конвертировать фотографии в пакетном процессе, применять фильтры фотографий и даже группировать избранные файлы одним щелчком мыши.

  1. Открывайте фотографии BMP в режиме эскизов, в полноэкранном режиме, в избранном и в других режимах.
  2. Конвертируйте BMP в JPEG, PNG, TIFF и т. Д. Или наоборот в пакетном режиме.
  3. Переименуйте файлы BMP, измените размер фотографий, примените фотоэффекты и многое другое.
  4. Выберите нужные фотографии в формате BMP, удалите ненужные или экспортируйте их.

Как открывать файлы BMP и управлять ими

Шаг 1. Запустите WidsMob Viewer Pro после установки программного обеспечения. Перейти к Файл меню и нажмите Откройте опция, чтобы вызвать диалог открытия файла. Затем найдите файлы BMP и откройте их. Конечно, вы можете открыть файловый менеджер и найти изображения BMP, перетащить их в средство просмотра.

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

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

Открыть файл BMP

Библиотечный режим: Чтобы просматривать и управлять всеми изображениями BMP на одном экране, найдите область библиотеки слева, щелкните значок + значок и назовите новый альбом. Затем переместите файлы BMP в альбом. Теперь вы увидите их все на эскизах. Это позволяет вам регулировать размер для просмотра большего количества файлов.

Библиотечный режим BMP

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

Режим EXIF ​​BMP

Режим слайд-шоу: Если просматривать файлы BMP вручную неудобно, щелкните значок Вид меню и выберите слайд-шоу режим. Затем изображения будут отображаться одно за другим. Вы можете настроить продолжительность и другие параметры.

Часть 3: Как конвертировать файлы BMP в пакетном режиме

Как упоминалось ранее, BMP - не лучший формат, если вы хотите распечатать или поделиться изображениями. WidsMob Viewer Pro может также конвертировать изображения BMP в другие форматы фотографий, такие как JPG, PNG, TIFF и т. д. Более того, он поддерживает пакетное преобразование или выбирает нужные для преобразования.

Шаг 1. После открытия файлов BMP в WidsMob Viewer Pro вы можете перейти к Редактировать меню, выберите Пакетная конвертация из файла Партия вариант. Затем появится диалоговое окно конвертера фотографий.

Шаг 2: нажмите Формат вариант и выберите подходящий выходной формат, например JPEG, для публикации в Интернете. Переместите ползунок Качество вариант. Чем лучше качество изображения, тем больше размер файла.

Шаг 3: нажмите Папка значок и задайте место назначения для хранения выходных изображений. Наконец, вы можете нажать на Конвертировать кнопку, чтобы начать преобразование файлов BMP в изображения JPEG.

Часть 4. Часто задаваемые вопросы об изображении BMP

Это название

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

BMP - это несжатые растровые изображения с высоким разрешением по сравнению с JPEG, который представляет собой сжатое цифровое изображение относительно небольшого размера. Это причина того, что изображения JPG, которые легко загружаются, предпочтительнее изображений BMP для использования в Интернете.

Да. Вы можете найти несколько онлайн-программ для просмотра фотографий и редакторов для открытия файлов BMP, например Fotor. Конечно, Google Photos - это еще одна веб-программа для просмотра фотографий в формате BMP, которая не только просматривает файлы фотографий, но также конвертирует файл BMP в PDF и многие другие форматы.

Заключение

Основываясь на приведенной выше информации, вы должны понимать, что такое BMP, преимущества и недостатки изображений BMP, а также как открывать, редактировать и управлять файлами фотографий. WidsMob Viewer Pro - лучший способ открывать файлы BMP на вашем компьютере и управлять ими. Более того, он может помочь вам конвертировать файлы BMP в другие форматы изображений. Если у вас есть какие-либо вопросы, вы можете поделиться подробностями в комментарии.

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

Формат PDF, также известный как Portable Document Format, стал одним из самых широко используемых форматов для хранения документов, которые включают текст и графику. В отличие от других форматов документов с аналогичными функциями, файлами PDF можно легко обмениваться между различными приложениями и операционными системами. Кроме того, информация в PDF файлах может быть защищена от копирования и печати, паролем или водяным знаком.

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

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


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

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

О форматах BMP и PDF

Хотя для работы с PDF нужны специальные программы, он – стандарт среди электронных документов. Конвертирование в PDF позволяет обойтись без потерь качества. Формат разработала компания Adobe Systems.

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

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

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

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

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

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

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

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

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

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

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



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



Доступны свыше сотни шрифтов, наклеек и форм. И самое главное это конечно синхронизация со всеми вашими устройствами. Работайте в облаке и получайте доступ к проектам откуда угодно! Но за это придется заплатить, т.к. опция является платной. Если приобрести годовой абонемент, то цена станет неприлично низкой.




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

Формат и чтение BMP файла (BMP format)

Создайте в графическом редакторе PAINT растровое изображение размером 50*35 пикселов. Выберите максимальный масштаб изображения и включите сетку. Сохраните рисунок в формате BMP как монохромный (файл 50_35.bmp).

Откройте листинг файла 50_35.bmp в приложении Commander (TC, VC или WC) для просмотра (клавиша F3) в шестнадцатеричном (HEX) представлении.

Сопоставим картинку растрового изображения и HEX коды в листинге файла 50_35.bmp.

Коды с 19-го по 23-й (32 00 00 00) определяют размер растра (число пикселов) по горизонтали. Коды с 24-го по 27-й (23 00 00 00) определяют размер растра по вертикали. Чтобы убедиться в этом воспользуйтесь калькулятором. В рассматриваемом примере размер растра – 50 * 35. HEX коду 32 соответствует десятичное (DEC) число 50, HEX коду 23 – DEC число 35.

На размера растра отводится 4 байта (HEX кода). Одним байтом определяется размер от 0 до 255. При превышении 255 (код FF) будет задействован следующий байт. Например, DEC числу 256 соответствует HEX код 100. Размер растра 256 будет представлен в листинге файла (00 01 00 00).

Коды символов, начиная с 63-го и до конца файла, содержат последовательность данных о цвете точек растра – в порядке слева направо вдоль каждой ряда и снизу вверх по рядам. Один байт описывает 8 точек, белая точка в BIN коде описывается единицей, черная – нулем.

Сколько байт необходимо для описания 50 точек в одном ряду? Не менее 7 (7*8=56). Но используется 8 (8*8=64), соблюдается кратность 4 байтам (4*8=32). Обратите внимание в листинге файла на HEX коды в конце описания каждого ряда повторяются байты FF FF C0 00. Эти байты описывают последние 32 точки из 64-х. Из них 14 несуществующих точек (64-50=14) описаны нулями.

Точки какого ряда описаны кодом FC 1F? Отсчитываем ряды по (по 8 байт в каждом), можно также ориентироваться на код (C0 00) в конце каждого ряда. Получаем 11-й ряд. В нем находятся 5 точек. Проверяем результат с помощью калькулятора.

Программа последовательно считывает из BMP-файла HEX-коды. По этим данным определяется порядковый номер каждой черной точки в ряду, начиная слева. Порядковые номера черных точек каждого ряда заносятся в список, который после окончании чтения ряда записывается в файл Result.txt.

Информация, записанная в файл Result.txt:

Size 50 35 nil nil nil nil nil nil nil nil nil nil (31 32 33 34 35) (30 31 32 33 34) (29 30 31 32 33 34) (28 29 30 31 32 33 34 35) (26 27 28 29 30 31 32 33 34) (26 27 28 29 30 31 32 33) (26 27 28 29 30 31 32) (25 26 27 28 29 30) (24 25 26 27 28 29) (24 25 26 27 28 29) (22 23 24 25 26 27 28) (21 22 23 24 25 26 27) (21 22 23 24 25 26) (21 22 23 24 25) (20 21 22 23 24) (18 19 20 21 22 23) nil nil nil nil nil nil nil nil nil

Описание программы

Из BMP-файла последовательно считываются байты с помощью функции read-char. Данные, которые будут использоваться в программе, запоминаются в переменных, остальные пропускаются.

Аналогично решается задача формирования 4-х байтного числа. В пользовательской функции (r) из 4-х байтов сложением формируется одно число. Каждый байт перед сложением сдвигается на соответствующее количество разрядов (1, 2 и 3 байта). Сдвиг выполняется функцией Lsh, параметры сдвига указывается в битах (8, 16 и 24). Функция (r) возвращает число в 10-тичном представлении. Результат запоминается в переменных (xsize и ysize).

Далее считываются и обрабатываются точки, на предмет выявления их цвета. Используется внешний цикл по ysize и внутренний цикл по xsize.

Отметим, что любое число независимо от его представления (HEX, DEC, BIN) остается одним и тем же. А функции обрабатывают его по-разному. Например, функция read-char работает с байтами, а Lsh с битами.

После тестирования первого пиксела, единица в маске сдвигается вправо (lsh mask -1):

Тестирование каждой точки, которая описывается в переменной n, анализируется путем применения побитового умножения c значением переменной mask(if (= (logand n mask) 0) (setq lst (cons x lst))):

В верхнем примере проверялась крайняя 6-я точка сформированного числа, в нижнем примере – 19-я точка. Если результат побитового умножения ноль, то проверяемая точка – черная. Порядковый номер точки в ряду сохраняется в переменой x. Каждая черная точка заносится в начало списка (setq lst (cons x lst)). По окончании анализа ряда список записывается наоборот в файле результата result.txt (princ (reverse lst) fo).

Маска и число обновляются после 32 сдвигов (if (= mask 0) (m)), а также, в случае, если заканчивается внутренний цикл (repeat xsize…). При этом, лишние пиксели, которые находятся за пределами растра (64-50=14), автоматически отсекаются, поскольку в начале очередного цикла по Y (repeat ysize (m) …) значения переменных n и mask обновляются.

На рисунке приведен пример простого изображения (размер 34 *10 точек) из 3-х красных точек в левом нижнем углу, остальные точки белые.

Раскрываем листинг файла и, сопоставляя с изображением, определяем, как описываются данные в нем:

Файл начинается с символов “BM”, указывающих на формат файла.

С 19 позиции 4 байта (22 00 00 00) указывают размер файла по X (количество точек в строке 34), с 23-й позиции – 4 байта (0A 00 00 00) указывают размер файла по Y (количество рядов 10).

Начиная с 55-го байта и до конца файла содержатся данные о цвете точек растра – в порядке слева направо вдоль каждого ряда и снизу вверх по рядам. Одна точка описывается тремя байтами, каждый из которых представляет синюю (Blue), зеленую (Green) и красную (Red) составляющие цвета. В рассматриваемом примере первая точка (красного цвета) описана байтами (00 00 FF) вторая (белого цвета) – (FF FF FF).

Каждый ряд точек описывается количеством байт, кратным 4. Ряд из 34 точек должен описываться 34*3 + 2 =104 байтами. Два байта (00 00) добавляется в конце описания каждого ряда для обеспечения кратности 4. Если бы ряд состоял из 33 точек, то в конце каждого ряда добавилось по 1 байту для обеспечения кратности 4 (33*3 + 1 =100).

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

Public Class frmIdntf Dim NameFile As String Dim FNum1, Xsize, Ysize, Dp, IK, IR, IG, IB, I, J As Integer Private Sub cmdLoad_Click(sender As Object, e As EventArgs) Handles cmdLoad.Click With OpenFileDialog On Error GoTo ErrorLabel .ShowDialog() NameFile = .FileName imgPrdct.ImageLocation = NameFile End With ErrorLabel: Exit Sub End Sub Private Sub cmdRun_Click(sender As Object, e As EventArgs) Handles cmdRun.Click FNum1 = FreeFile() FileOpen(FNum1, NameFile, OpenMode.Binary) Xsize = f2(19) Ysize = f2(23) Dp = f3(Xsize) ‘ количество лишних байтов в ряду I = 54 For Y = 1 To Ysize For X = 1 To Xsize I = I + 1 IB = F1(I) I = I + 1 IG = F1(I) I = I + 1 IR = F1(I) Next X I = I + Dp ‘ сдвиг на количество лишних байтов в ряду Next Y FileClose(FNum1) End Sub Private Function F1(I) As Byte FileGet(FNum1, F1, I) End Function Private Function f2(I) Dim N1, N2, N3, N4 As Long N1 = F1(I) N2 = F1(I + 1) N2 = N2 * 256 ‘сдвиг на байт N3 = F1(I + 2) N3 = N3 * 65536 ‘сдвиг на 2 байта (256 в квадрате) N4 = F1(I + 3) N4 = N4 * 16777216 ‘сдвиг на 3 байта (256 в кубе) f2 = N1 + N2 + N3 + N4 End Function Private Function f3(Xsize) Dim N1, N2, N3 As Long N1 = Xsize * 3 N2 = N1 \ 4 N3 = N2 * 4 If N1 > N3 Then f3 = (N2 + 1) * 4 — N1 Else : f3 = 0 End Function End Class

Ниже приводится модуль программы, который используется в приложении 3D-реконструкция по 2-м изображениям. Модуль обеспечивает загрузку данных из BMP файлов в динамически выделяемую оперативную память.

Как можно конвертировать файл PNG с глубиной цвета 24 в монохромный BMP в режиме командной строки?
Это не разовая задача, нужен скрипт или утилита в режиме командной строки для автоматизации процесса конвертации графических файлов.
Через nconvert это сделать не получилось.

convert *.jpg *.jpg

(4) Исходные файлы только в png - тут не ничего изменишь.
Конечный файл должен быть bmp b/w - тут тоже ничего не изменишь, т.к. железяка другие форматы не понимает.

По ссылкам много примером конвертации png -> bmp.
Но ни одна из них не смогла конвертировать png -> bmp black&white.
Это обязательное(!) условие - битмап на выходе должен быть монохромным!

(4) импорт в какую-нибудь железку с термопринтером, к примеру. Многие из них едят только монохромные BMP.

(9) nConvert точно не умеет конвертировать в монохром.
По остальным софтинам не нашел примера конвертации в монохром.
Дайте пожалуйста живой пример командной строки!
Не закидывайте меня ссылками - нет в них искомого. Посмотрите эти ссылки сами, прежде чем их постить мне.

(13) Жду! Куда деваться.
Я в этом деле нуб. Наверняка, есть спецы в этом деле. Жду от них дельного совета.
Спасибо.

(12) разжевывать и в рот класть тут не будут. Imagemagick черта лысого сумеет сделать, но почитать хелп надо самому.

Choose from: Bilevel, Grayscale, GrayscaleMatte, Palette, PaletteMatte, TrueColor, TrueColorMatte, ColorSeparation, or ColorSeparationMatte.

(15) Почему бы и не разжевать. Я ведь не много прошу всего лишь пример командной строки. Там же символов не больше 40 выйдет.
Неужели я много прошу. Я, не спец, потеряю день на поиски. А специалист в этом деле, соберет инфу минут за 10.

В обмен я могу помочь в чем-то другом, в чем являюсь специалистом.

(17) Программирование 1С 7.7, методология учета в типовых конфигурациях 1С 7.7. Динозавр, одним словом. Но может кому пригожусь.
Консультация в бухгалтерском и налоговом учета, алкогольные декларации, ЕГАИС.

(21) bilevel это двухуровневый, надо полагать. Белый и черный. Во всяком случае есть смысл попробовать

(23) Можно разжеванный пример командной строки? Я его обязательно попробую. Сам не мог составить - уже 15 минут по ссылке смотрю, но ничего вкурить не получается.

(22) Как этим пользоваться? не нашел документацию.
(25) Спасибо, сейчас проверю.
Пока не разбегайтесь ))

там пример вообще-то есть в хелпе, прямо в этой статье. Только для виндовой версии ImageMagick, как я понял, команду convert надо заменить на magick.

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

(25) Проверил не работает.
Дал команду
magick 1.jpg -type bilevel 1.bmp
На выходе дал файл 1.bmp 24-битный.

(22) png2bmp2 похоже не поддерживает режим командной строки
bmconv выдал

I:\bmconv 1.jpg 1.bmp

BMCONV version 112.
Compiling.
Multiple bitmap store type: File store
Epoc file: 1.jpg

Bitmap file 1 : 1.bmp
File does not exist

А инструкции как пользоваться нет.

(37) попробуйте двумя этапами
i_view32.exe c:\*.jpg /gray /convert=d:\temp\*.bmp
i_view32.exe c:\*.bmp /bpp=2 /convert=d:\temp\*.bmp

(42) У меня вылезли ошибки:

I:\1\Zint>magick 1.jpg -type bilevel temp.jpg
magick: ImproperImageHeader `1.jpg' @ error/png.c/ReadPNGImage/3982.
magick: NoImageForProperty "%w" @ warning/property.c/GetMagickPropertyLetter/248
6.
magick: UnknownImageProperty "%w" @ warning/property.c/InterpretImageProperties/
3399.
magick: NoImageForProperty "%h" @ warning/property.c/GetMagickPropertyLetter/237
8.
magick: UnknownImageProperty "%h" @ warning/property.c/InterpretImageProperties/
3399.
magick: NoImageForProperty "%m" @ warning/property.c/GetMagickPropertyLetter/240
9.
magick: UnknownImageProperty "%m" @ warning/property.c/InterpretImageProperties/
3399.

I:\1\Zint>magick temp.jpg 1.bmp
magick: UnableToOpenBlob 'temp.jpg': No such file or directory @ error/blob.c/Op
enBlob/2691.
magick: UnableToOpenFile `temp.jpg' @ error/png.c/ReadPNGImage/3974.
magick: NoImageForProperty "%w" @ warning/property.c/GetMagickPropertyLetter/248
6.
magick: UnknownImageProperty "%w" @ warning/property.c/InterpretImageProperties/
3399.
magick: NoImageForProperty "%h" @ warning/property.c/GetMagickPropertyLetter/237
8.
magick: UnknownImageProperty "%h" @ warning/property.c/InterpretImageProperties/
3399.
magick: NoImageForProperty "%m" @ warning/property.c/GetMagickPropertyLetter/240
9.
magick: UnknownImageProperty "%m" @ warning/property.c/InterpretImageProperties/
3399.

I:\1\Zint>del temp.jpg
Не удается найти I:\1\Zint\temp.jpg

(42) Спасибо! Получилось!
Единственный недостаток: конвертирует долго и файл magick.exe весит много (14 МБ).
Есть ли более портативная версия?

C:\>i_view32.exe d:\Pictures\1.jpg /bpp=1 /convert=d:\Pictures\1.bmp

C:\>i_view32.exe d:\Pictures\1.jpg /gray /bpp=1 /convert=d:\Pictures\1.bmp

Этот сделает из цветного grayscale - а потом b&w.

(48) Спасибо! Получилось!
Исходником всегда будет qr-код.
Ваша софтина лучше magick, т.к.:
1) делает в одно преобразование, а не в два.
2) быстрее
3) весит всего 450 Кб.

Я должник. Если нужен ЕГАИС, отгружу бесплатно ))

(54) я не местный )))
И да..не поленился установить этот ирфанвью, он кстати умеет много различных вещей.

i_view32.exe 1.jpg /bpp=1 /convert=1.bmp
i_view32.exe 1.jpg /gray /bpp=1 /convert=1.bmp

Какой из этих вариантов нужно использовать для моей задачи при условии что оба работают как надо?

(51) Одна все-таки проблемка есть, софтина не понимает каталоги, набранные кириллицей.
Это может стать препятствием :((

(59) Проблему решил. Через Wshell кириллические каталоги обрабатываются успешно.

Последний вопрос (надеюсь): i_view32.exe нормально работает в 64-битной ОС?

Читайте также: