Конвертируем bmp в jpg
Содержание:
Чем открыть этот формат
Данный формат поддерживают множество приложений, как от сторонних разработчиков, так и от разработчиков Microsoft.
Вариант 1: FastStone Image Viewer
Это довольно известная утилита, позволяющая просматривать изображения.
-
Открываем утилиту. Нажимаем на «Файл», а затем на «Открыть».
-
Появляется новое окно, в котором необходимо выбрать нужный BMP-файл и щёлкнуть на «Открыть».
- В левом нижнем углу находится область предпросмотра, в которой располагается выбранное изображение. Содержимое директории можно отыскать в правой части экрана. Для того чтобы открыть изображение на полный экран нужно кликнуть по файлу в каталоге расположения. Готово!
Вариант 2: IrfanView
-
Запускаем утилиту. Кликаем на «Файл», а затем на «Открыть».
-
В появившемся окне открытия сначала нужно переместиться в директорию с нужной картинкой, а затем выбрать ее нажав на «Открыть». Готово!
Вариант 3: XnView
-
Включаем программу и нажимаем на «Файл», а затем на «Открыть».
-
В новом окне находим нужный файл с изображением и нажимаем на кнопку «Открыть».
- Изображение открылось в новом окошке самой утилиты. Готово!
Вариант 4: Adobe Photoshop
Рассмотрим, как открыть данный формат в растровом графическом редакторе Фотошоп.
Заходим в Фотошоп и стандартно нажимаем «Файл» – «Открыть».
Отобразилось окно открытия. Находим нужное BMP-изображение и щёлкаем на «Открыть».
Появляется окно с информацией о том, что отсутствует внедренный цветовой профиль
Не обращаем на это внимание, ставим флажок на позицию «Оставить без изменений» и кликаем на кнопку «ОК». Готово! Изображение открылось.
Вариант 5: Gimp
-
Заходим в программу и идем по следующему пути: «Файл» – «Открыть».
-
Находим необходимый фал и нажимаем на «Открыть».
- Готово! Изображение открылось в самой программе.
Данный вариант намного проще предыдущего, так как Гимп, в отличии от Фотошопа, является бесплатным графическим редактором.
Вариант 6: OpenOffice
-
Запускаем бесплатный пакет OpenOffice. В меню программы нажимаем на кнопку «Открыть…».
-
На экране появилось специальное окно поиска. Находим через него нужный файл с изображением, выбираем его и кликаем на кнопку «Открыть».
- Готово! Изображение открыто.
Вариант 7: Google Chrome
BMP-формат, также открывается различными браузерами.
- Заходим в Google Chrome. Зажимаем сочетание клавиш Ctrl+O.
- Появляется окно открытия, через которое находим изображение и кликаем на «Открыть».
- Готово! Рисунок появился в окошке самого браузера.
Вариант 8: Universal Viewer
-
Запускаем универсальный просмотрщик изображений, а затем стандартно идем по пути: «Файл» – «Открыть».
-
Через окно поиска находим нужное изображение в данном формате и кликаем на кнопку «Открыть».
- Рисунок открылся.
Вариант 9: Paint
Стоит отметить, что изображение в и стандартными средствами операционной системы.
-
Открываем «Пуск», переходим в «Стандартные», а затем заходим в Paint.
-
Нажимаем на иконку, находящуюся левее кнопки «Главная».
-
Кликаем на кнопку «Открыть».
-
В новом окне находим файл с нужным изображением и кликаем на «Открыть».
- Картинка появилась в окне графического редактора. Готово!
Вариант 10: Средство просмотра фотографий Windows
- Заходим в папку с BMP-изображением и открываем «Проводник». Кликаем ПКМ по объекту и в появившемся меню выбираем «Открыть с помощью».
-
Переходим на элемент «Просмотр фотографий Windows».
- Изображение появилось на экране. Готово!
Теперь Вы знаете огромное количество способов, при помощи которых можно открыть изображение BMP-формата.
Для чего может использоваться этот формат?
Хоть формат BMP и устарел морально, но он все равно может использоваться в некоторых случаях. Достаточно того факта, что весь интерфейс «Виндовс» основан на данном растровом формате. Почему так? Потому, что использовать BMP очень удобно. Он обладает хорошей цветностью и полным отсутствием компрессии. Также изображения в этом формате можно редактировать какое угодно количество раз. И качество ничуть не пострадает. В отличие от того же JPEG. Как раз этим и объясняется живучесть этого формата. Многие разработчики программ под «Виндовс» также активно используют изображения BMP в своих продуктах.

Еще одна область применения формата — БИОСы компьютеров. Некоторые из них имеют весьма неплохие картинки (они могут включать в себя лого производителя, некоторые элементы интерфейса и прочее). Все они сделаны в формате BMP. Растровые изображения такого плана отлично показывают себя в системах без адекватного графического интерфейса. Потому они и используются в БИОСах.
Немного о формате
Представленный ниже код несколько отличается от итогового. Сделано это для того, чтобы читателю было проще понять алгоритм работы программы.
Шапка
В первых 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 картинку другого типа, не говоря уже об использовании стандартных средств Windows и графических редакторов, является применение специализированных конвертеров, которые работают в автоматическом режиме.

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

Однако пока еще BMP File существует и используется
Поэтому пользователям важно знать, чем можно открыть такие файлы и как сконвертировать его в более удобные форматы. Вот это сейчас и обсудим
Сразу стоит сказать, что таких программ великое множество. И все они способны адекватно работать с данным форматом, так как он довольно старый. Но вот в конвертации есть свои нюансы, о которых стоит упомянуть.
Файлы 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
Общие проблемы с открытием файлов BMP
Adobe Illustrator CC не установлен
Дважды щелкнув по файлу BMP вы можете увидеть системное диалоговое окно, в котором сообщается «Не удается открыть этот тип файла». В этом случае обычно это связано с тем, что на вашем компьютере не установлено Adobe Illustrator CC для %%os%%. Так как ваша операционная система не знает, что делать с этим файлом, вы не сможете открыть его дважды щелкнув на него.
Совет: Если вам извстна другая программа, которая может открыть файл BMP, вы можете попробовать открыть данный файл, выбрав это приложение из списка возможных программ.
Установлена неправильная версия Adobe Illustrator CC
В некоторых случаях у вас может быть более новая (или более старая) версия файла Bitmap Image File, не поддерживаемая установленной версией приложения. При отсутствии правильной версии ПО Adobe Illustrator CC (или любой из других программ, перечисленных выше), может потребоваться загрузить другую версию ПО или одного из других прикладных программных средств, перечисленных выше. Такая проблема чаще всего возникает при работе в более старой версии прикладного программного средства с файлом, созданным в более новой версии, который старая версия не может распознать.
Совет: Иногда вы можете получить общее представление о версии файла BMP, щелкнув правой кнопкой мыши на файл, а затем выбрав «Свойства» (Windows) или «Получить информацию» (Mac OSX).
Резюме: В любом случае, большинство проблем, возникающих во время открытия файлов BMP, связаны с отсутствием на вашем компьютере установленного правильного прикладного программного средства.
Даже если на вашем компьютере уже установлено Adobe Illustrator CC или другое программное обеспечение, связанное с BMP, вы все равно можете столкнуться с проблемами во время открытия файлов Bitmap Image File. Если проблемы открытия файлов BMP до сих пор не устранены, возможно, причина кроется в других проблемах, не позволяющих открыть эти файлы. Такие проблемы включают (представлены в порядке от наиболее до наименее распространенных):
Типы файлов BMP
Ассоциация основного файла BMP
.BMP
| Формат файла: | .bmp |
| Тип файла: | Bitmap Image File |
Также упоминается как файл BMP, {EXT файл} представляет собой файл, графическое изображение растра для хранения растровых цифровых изображений. Файл может хранить 2D цифровых изображений как с цветовыми (водолазы глубины цвета) и монохромный.
| Создатель: | Various Developers |
| Категория файла: | Файлы растровых изображений |
| Ключ реестра: | HKEY_CLASSES_ROOT\.bmp |
Программные обеспечения, открывающие Bitmap Image File:
Adobe Illustrator CC, разработчик — Adobe Systems Incorporated
Совместимый с:
| Windows |
| Mac |
Adobe Photoshop, разработчик — Adobe Systems Incorporated
Совместимый с:
| Windows |
| Mac |
MacPhun ColorStrokes, разработчик — Macphun
Совместимый с:
| Mac |
Google Drive, разработчик —
Совместимый с:
| iOS |
| Android |
| Web |
IrfanView, разработчик — Open Source
Совместимый с:
| Windows |
| iOS |
| Android |
| Linux |
ACD Systems ACDSee, разработчик — ACD Systems
Совместимый с:
| Windows |
Microsoft Windows Photos, разработчик — Microsoft Corporation
Совместимый с:
| Windows |
ACD Systems Canvas, разработчик — Microsoft Corporation
Совместимый с:
| Windows |
Apple Photos, разработчик — Apple
Совместимый с:
| Mac | |
| iOS |
Adobe Photoshop Elements, разработчик — Adobe Systems Incorporated
Совместимый с:
| Windows |
| Mac |
Apple Preview, разработчик — Apple
Совместимый с:
| Mac |
Microsoft Paint, разработчик — Microsoft Corporation
Совместимый с:
| Windows |
| Android |
Чтение 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);
}