Рисунок с расширением bmp

Предыстория

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

Однако шли года, и данный формат перестал быть востребованным. Появились куда более продвинутые технологии компрессии. При этом качество цвета у новых форматов было куда лучше. Теперь BMP используется только в некоторых программах. Да и то, только в тех, разработчики которых не «заморачивались» на интерфейсе, например, ОС «Виндовс». Файл 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

Чем jpeg (jpg) формат лучше?

Файл формата .jpeg меньше по размерам файла аналогичного качества в формате .bmp примерно в 30 раз!

Почему? Причин несколько.

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

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

Но когда появился интернет, а скорости выхода в интернет тогда были очень маленькие, то для того, чтобы картинка формата .bmp из интернета отобразилась на мониторе, приходилось ждать по 15-20 минут, а то и вовсе не загружалась.

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

Есть еще много профессиональных нюансов и для этого формата и для других, но факт остается фактом. Формат .jpeg (кстати говорят, что правильно произносить «джейпег», но я его называю «джипег» — просто привык так называть) стал очень популярным и используется практически повсеместно.

Что еще хочу сказать про графические файлы уже независимо от формата.

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

Если нужна маленькая картинка, где человеческий глаз особо и не различит — качественная она или нет, тут можно сжать и в 100 — 1000 раз, а то и больше.

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

Ну и напоследок еще хочу сказать о том, чем отличаются векторные и растровые графические форматы.

Я объясню по простому на пальцах.

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

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

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

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

Естественно, что и программы просмотра и редактирования этих форматов разные.

Примером популярного векторного графического редактора я могу назвать программу Corel DRAW.

Примером популярного растрового графического редактора я могу назвать программу Photoshop, в которой, собственно и сделаны картинки для этой статьи.

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

На этом все. Всем удачи и творческих успехов.

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

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

Шапка

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

Заголовок

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

Чтение файла

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

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

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

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

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

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

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

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

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

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

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

Зачем нужен и где применяется формат BMP

Несмотря на то что формат BMP являлся первым форматом просмотра и сохранения картинок в Windows, его недостаток — растровость. Т. е. кодируется каждая точка, а не вся одноцветная (или близкая по оттенкам) область изображения. Из-за этого любой скриншот из этой статьи, занимающий в формате JPEG или PNG от нескольких десятков до пары сотен килобайт, в формате BMP расходовал бы до нескольких мегабайт, словно это чертёж или карта для печати на листах A0 или «скан» высокого разрешения от 100 Мп. Забавная для современных пользователей особенность: картинки BMP на сайтах прогружаются снизу вверх — а не наоборот, как в остальном.

Даже на 100-мегабитном интернете такие картинки загружались бы не мгновенно — а смартфоны на Android, особенно нижней ценовой планки, заметно «подвисали» бы. Собственно, из-за громоздкости формат BMP покинул гаджеты и ПК — сохранять картинки в BMP можно и сейчас, но им чаще пользуются для чёрно-белых или малоцветных чертежей, предварительно сжав до 2–6-битной разрядности (2–64 цвета).

Рисовать, например, комиксы в True Color (16777216 цветов, 24-битная кодировка) — это использование как дискового пространства, так и трафика при отправке, поэтому при сохранении картинки её сжимают в программе Paint как минимум в JPEG, или используют векторные редакторы типа CorelDraw и других аналогов.

Резюме файла BMP

Эти файлы BMP можно просматривать с помощью двенадцать существующего (-их) прикладных (-ого) программных (-ого) средств (-а), как правило, Adobe Illustrator CC, разработанного Adobe Systems Incorporated. Оно связано с один основным (-и) типом (-ами) файла (-ов), но часто встречается в формате Bitmap Image File.
Чаще всего файлы BMP классифицируют, как Raster Image Files.

Файлы BMP были обнаружены на платформах Windows, Mac и iOS. Они подходят для настольных ПК (и мобильных устройств).

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

Чем открыть формат файла BMP?

Что касается открытия изображений такого типа, любая операционка Windows имеет встроенные средства для этого.

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

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

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

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

Что касается редактирования, для работы можно применять все, что угодно, например, те же Adobe Photoshop, Corel Draw или любой другой графический редактор, имеющий даже минимальный набор инструментов и возможностей.

Что такое форматы изображений бывают и зачем они нужны?

Не буду засорять статью избытком умных слов. Тем более, сам не всегда понимаю их смысл. Формат изображения применительно к интернету и компьютеру (под изображением я имею в виду какую-то графическую информацию – фотографии или рисунки) – это способ хранить и, соответственно, передавать картинки как элемент информации.

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

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

(В качестве иллюстрации своих слов я взял портреты Владимира Семеновича Высоцкого, да простят меня те, кому это покажется неуместным)

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

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

То же самой и с форматами изображений
– вариантов множество.

Но их всех можно разделить на две большие группы – растровые и векторные. А нет, есть еще одна группа – смешанные, или комплексные, куда ж без них в современном мире

Нас больше интересуют растровые форматы – с ними чаще всего приходится сталкиваться. Но по паре слов нужно сказать и о других группах.

Векторные изображения основаны на геометрических фигурах – точках, кривых, кругах, многоугольниках. Векторные изображения можно увеличивать без потери качества. Примеры векторных файлов – svg, cdr, eps
. Но, честно говоря, я не сталкивался с такими форматами.

Комплексные форматы, как следует из названия, обладают признаками и векторных, и растровых изображений. Наиболее известный пример такого формата – файлы pdf
. Наверняка каждый сталкивался с ними: многие электронные книжки и документы как раз и хранятся в PDF-формате.

Примеры

В следующем примере кода показано, как создать новый объект Bitmap из файла с помощью GetPixel SetPixel методов и для перекрашивания изображения.The following code example demonstrates how to construct a new Bitmap from a file, using the GetPixel and SetPixel methods to recolor the image. В нем также используются PixelFormat Width свойства, и Height .It also uses the PixelFormat, Width, and Height properties.

Этот пример предназначен для использования с Windows Forms, который содержит, и, Label PictureBox Button и соответственно.This example is designed to be used with a Windows Forms that contains a Label, PictureBox, and Button named , , and , respectively. Вставьте код в форму и свяжите метод с Click событием кнопки.Paste the code into the form and associate the method with the button’s Click event.

.JPEG (JPG)

Это, пожалуй, самый распространенный графический формат. Обычно он используется для публикации в интернете фотографий и изображений с текстом. JPEG является TrueColor-форматом, то есть может хранить изображения с глубиной цвета 24 бит/пиксель. Данный формат может отображать более 16 млн цветов.

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

JPEG с высоким качеством (100). Размер 113 КБ

JPEG со средним качеством (50). Размер 59 КБ

JPEG с низким качеством (20). Размер 27 КБ

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

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

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

Листинг 1

unit bmpread; {процедуры для работы с Bmp}
interface
type
  artype = arrayof byte;
  arptr = ^artype;
  bmFileHeader = record	{заголовок файла}
    Typf : word;        {сигнатура }
    Size : longint;     {длина файла в байтах}
    Res1 : word;        {зарезервировано}
    Res2 : word;        {зарезервировано}
    OfBm : longint;     {смещение изображения в байтах (1078)}
  end;
  bmInfoHeader = record   {информационный заголовок}
    Size : longint;       {длина заголовка в байтах (40)}
    Widt : longint;       {ширина изображения (в точках)}
    Heig : longint;       {высота изображения (в точках)}
    Plan : word;          {число плоскостей (1)}
    BitC : word;          {глубина цвета (бит на точку) (8)}
    Comp : longint;       {тип компрессии (0 - нет)}
    SizI : longint;       {размер изображения в байтах}
    XppM : longint;       {горизонтальное разрешение}
 		          {(точек на метр - обычно 0)}
    YppM : longint;       {вертикальное разрешение}
		          {(точек на метр - обычно 0)}
    NCoL : longint;       {число цветов}
		          {(если максимально допустимое - 0)}
    NCoI : longint;       {число основных цветов}
  end;                   
  bmHeader = record       {полный заголовок файла}
    f : bmFileHeader;     {заголовок файла}
    i : bmInfoHeader;     {информационный заголовок}
    p : arrayof byte; {таблица палитры}
  end;

  bmhptr = ^bmHeader;

{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr;      {массив с изображением}
                  xim,yim:word;	    {размеры}
                  pal:arptr;	    {палитра}
                  filename:string); {имя файла}

{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);

implementation

{$R-}

{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr; xim,yim:word;
                  pal:arptr; filename:string);
var
  h	  : bmHeader;
  i	  : integer;
  bmpfile : file;
  s	  : longint;
begin
  assign(bmpfile,filename);
  reset(bmpfile,1);
  blockread(bmpfile,h,sizeof(h));   {чтение заголовка}
  for i := 0 to yim-1 do begin	    {построчное чтение}
    blockread(bmpfile,image^,xim);
    if (xim mod 4) <> 0 then
      blockread(bmpfile,s,4 - (xim mod 4));
  end;
  close(bmpfile);
  for i ^= 0 to 255 do begin       {преобразование палитры}
    pal^ := h.p shr 2; {синий}
    pal^ := h.p shr 2; {зеленый}
    pal^ := h.p shr 2; {красный}
  end;
end;

{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);
var
  bmpfile:file;
begin
  assign(bmpfile,filename);
  reset(bmpfile,1);
  blockread(bmpfile,header^,sizeof(header^));
  close(bmpfile);
end;

end.

Устранение неполадок при открытии файлов 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 и его широкое распространение в Windows и в других местах, а также тот факт, что этот формат относительно хорошо документирован и не защищен патентами, делают его очень распространенным форматом, который программы обработки изображений из многих операционных систем могут читать. и написать. Файлы ICO и CUR содержат растровые изображения, начинающиеся с BITMAPINFOHEADER.

Многие старые графические пользовательские интерфейсы использовали растровые изображения в своих встроенных графических подсистемах; например, Microsoft Windows и OS / 2 площадки GDI подсистема, где формат конкретных используется является Windows , и / 2 растровый формат файла ОС , как правило , с именем с расширением файла из .

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

Комментарии

Точечный рисунок состоит из точечных данных для графического изображения и его атрибутов.A bitmap consists of the pixel data for a graphics image and its attributes. Существует множество стандартных форматов для сохранения растрового изображения в файл.There are many standard formats for saving a bitmap to a file. GDI+GDI+ поддерживает следующие форматы файлов: BMP, GIF, EXIF, JPG, PNG и TIFF.supports the following file formats: BMP, GIF, EXIF, JPG, PNG and TIFF. Дополнительные сведения о поддерживаемых форматах см. в разделе Типы точечных рисунков.For more information about supported formats, see Types of Bitmaps.

Вы можете создавать изображения из файлов, потоков и других источников с помощью одного из Bitmap конструкторов и сохранять их в поток или в файловой системе с помощью Save метода.You can create images from files, streams, and other sources by using one of the Bitmap constructors and save them to a stream or to the file system with the Save method. Изображения рисуются на экране или в память с помощью DrawImage метода Graphics объекта.Images are drawn to the screen or to memory by using the DrawImage method of the Graphics object. Список разделов, посвященных работе с файлами изображений, см. в разделе Работа с изображениями, точечными рисунками, значками и метафайлами.For a list of topics about working with image files, see Working with Images, Bitmaps, Icons, and Metafiles.

Примечание

BitmapКласс недоступен для разных доменов приложений.The Bitmap class is not accessible across application domains. Например, если создать динамическую AppDomain и создать несколько кистей, перьев и точечных рисунков в этом домене, а затем передать эти объекты обратно в основной домен приложения, вы можете успешно использовать перья и кисти.For example, if you create a dynamic AppDomain and create several brushes, pens, and bitmaps in that domain, then pass these objects back to the main application domain, you can successfully use the pens and brushes. Однако при вызове DrawImage метода для рисования упакованного Bitmap можно получить следующее исключение.However, if you call the DrawImage method to draw the marshaled Bitmap, you receive the following exception.

Удаленное взаимодействие не может найти поле «Native Image» в типе «System. Drawing. Image».Remoting cannot find field «native image» on type «System.Drawing.Image».

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий