Какая информация записана в заголовке файла формата bmp
Перейти к содержимому

Какая информация записана в заголовке файла формата bmp

  • автор:

Русские Блоги

BMP (полное имя Bitmap) — это стандартный формат файла изображения в операционной системе Windows, который можно разделить на две категории: зависящее от устройства растровое изображение (DDB) и независимое от устройства растровое изображение (DIB), которое очень широко используется. Он использует формат хранения растровых изображений, в дополнение к дополнительной глубине изображения, не использует никакого другого сжатия, поэтому пространство, занимаемое файлом BMP, очень велико. Глубина изображения файлов BMP может быть выбрана из lbit, 4bit, 8bit и 24bit. При хранении данных в файле BMP изображение сканируется в порядке слева направо и снизу вверх. Поскольку формат файла BMP является стандартом для обмена данными, связанными с графиками, в среде Windows, все графические и графические программы, работающие в среде Windows, поддерживают формат изображений BMP.

Вот краткое введение в формат BMP на конкретном примере.

1. Общая информация

Файлы в формате BMP выглядят следующим образом от начала до конца:

  • заголовок файла bmp (заголовок файла bmp): всего 14 байт;
  • Заголовок растровой информации (растровая информация): всего 40 байт;
  • Цветовая палитра: необязательно;
  • Растровые данные

Ниже приводится подробное введение через следующие рисунки:

Часть информации об изображении выглядит следующим образом:

2. заголовок файла bmp

Заголовок файла bmp содержит следующую информацию:

  • bfType: 2 байта, тип файла;
  • bfSize: 4 байта, размер файла;
  • bfReserved1: 2 байта, зарезервированы, должны быть установлены в 0;
  • bfReserved2: 2 байта, зарезервированы, должны быть установлены в 0;
  • bfOffBits: 4 байта, смещение от начала до растровых данных;

  • biSize: 4 байта, размер информационного заголовка, который составляет 40;
  • biWidth: 4 байта, указывающих ширину изображения в пикселях;
  • biHeight: 4 байта, указывающих высоту изображения в пикселях. В то же время, если оно положительное, это означает, что битовая карта инвертирована (то есть данные указывают от нижнего левого угла до верхнего правого угла изображения).
  • biPlanes: 2 байта, указывающие количество цветовых плоскостей для целевого устройства, всегда равное 1;
  • biBitCount: 2 байта, указывающих количество бит / пикселей, значения 1, 2, 4, 8, 16, 24, 32;
  • biCompression: 4 байта, указывающие тип сжатия изображения, наиболее часто используемый 0 (BI_RGB), что означает отсутствие сжатия;
  • biSizeImages: 4 байта, указывающих размер растровых данных; при использовании формата BI_RGB его можно установить равным 0;
  • biXPelsPerMeter: указывает горизонтальное разрешение, единица измерения — пиксель / метр, целое число со знаком;
  • biYPelsPerMeter: указывает вертикальное разрешение, единица измерения — пиксель / метр, целое число со знаком;
  • biClrUsed: указывает число цветовых индексов в палитре, используемых растровым изображением, 0 означает использовать все;
  • biClrImportant: указывает число цветовых индексов, которые имеют важное влияние на отображение изображения, а 0 указывает, что это важно;

индекс синий зеленый красный Alpha
0 01 10 37 00
1 00 10 49 00
2 00 18 44 00
3 01 1D 58 00

  • biBitCount=0x0018=24;
  • bfWidth=0x000001c6=454;
  • bfHeight=0x00000053=83;
  • biSizeImage=0x0001BA3c=113212;

Тогда размер растровых данных:

В этом случае после сканирования строки данных последние несколько байтов могут быть заполнены 0, и их необходимо пропустить:

Интеллектуальная рекомендация

Использование Mybatis paging assistant и General Mapper

Трансфер изhttps://blog.csdn.net/zbw18297786698/article/details/53945729/ 1. Представление Mybatis paging assistant 2. Использование Mybatis paging assistant 3. В программе Java установите параметры п.

64-битная целочисленная проблема

Название Описание Введите положительное целое число n, посчитайте количество его положительных множителей, n <= 10 ^ (12), например, когда n = 30, на выходе должно быть 8. Исходный код Анатомия Лог.

Кратко поговорим о шаблонах проектирования-мост

1. Что такое режим моста Режим моста (Bridge) отделяет абстрактную часть от части реализации, так что все они могут быть изменены независимо. Схема структуры UML выглядит следующим образом: Среди них .

Простое приложение Android Android (1)

Простое приложение Android Android (1) Во-первых, кратко Помните, — я не узнал простое приложение Android. (Операция дизайна учебной программы) Пример Пакет: Ссылка: https: //pan.baidu.com/s/1leq1owku.

Формат вывода строк Python

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

Описание формата BMP

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

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

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

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

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

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

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

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

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

Хранение данных в формате 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
24 Width % 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, & bfh, sizeof ( bfh ) , & RW, NULL ) ;
WriteFile ( hFile, & bih, sizeof ( bih ) , & RW, NULL ) ;

// Запишем палитру
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

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.

Информатика. 11 класс (Повышенный уровень)

С общими принципами кодирования графической информации вы познакомились в 10 классе (см. § 14.1). В каждом конкретном случае способ хранения изображений в памяти компьютера определяют разработчики программ. В то же время, для того чтобы их хранить, переносить между компьютерами и разными приложениями, требуется некоторая стандартизация способа записи — формат файлов.

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

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

  • растровые;
  • векторные;
  • метафайловые/универсальные.

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

BMP

Формат BMP (Bitmap — карта пикселов) — стандартный растровый формат без сжатия, разработанный компанией Microsoft. Позволяет хранить данные о цвете в значениях цветовой модели RGB (до 16 млн. оттенков). Используется в качестве формата графических файлов для хранения исходных изображений. Легко конвертируется в другие форматы.

JPEG

В формате JPEG (Joint Photographic Experts Group — объединенная группа фотографов-экспертов) используется высокая степень сжатия с некоторыми потерями качества. Применяется для хранения конечного варианта изображений фотографического качества. Файлы такого формата могут иметь расширения jpg и jpeg.

GIF

Формат GIF (Graphic Interchamge Format — формат для обмена изображениями) был разработан для передачи растровых изображений по сетям. Поддерживает анимацию и прозрачность фона. Имеет ограниченную индексную палитру цветов (не более 256). Использует алгоритм сжатия LZW, что позволяет без потерь сжимать файлы, в которых много однородных заливок.

PNG

В формате PNG (Portable Network Graphics — переносимые сетевые изображения) используется высокая степень сжатия без потерь для изображений с большим количеством цветов. Поддерживает многоуровневую прозрачность. PNG-формат является одним из самых распространенных форматов изображений, используемых в интернете.

TIFF

Формат TIFF (Tagged Image File Format — формат файлов растровых изображений) — это популярный формат для хранения изображений с большой глубиной цвета. Изображения TIFF-формата могут быть сохранены в сжатом или несжатом виде, а используемое сжатие может быть с потерями или без. В большинстве случаев используется сжатие без потерь. Формат поддерживается многими графическими редакторами. TIFF-формат предпочтительнее использовать при сканировании, распознавании текста, в полиграфии.

Логотипы, схемы, элементы оформления удобнее представлять в векторном формате.

В отличие от растровых форматов практически все векторные форматы изначально разрабатывались под конкретные графические редакторы (пример 9.2). Рассмотрим наиболее используемые векторные форматы.

PDF

Формат PDF (Portable Document Format — формат переносимого документа) — это межплатформенный формат, созданный компанией Adobe. Используется для передачи по сети изображений и смешанных документов, содержащих и текст, и графику.

SVG

Файл формата SVG (Scalable Vector Graphics — масштабируемая векторная графика) содержит описание составляющих векторного изображения (линий, кругов, прямоугольников и т.д.) с указанием их размеров, координат и другой необходимой информации. Используется в веб-дизайне.

WMF

Файлы формата WMF (Windows Metafile) используются ОС Windows. которая хранит команды рисования и команды определения свойств графических объектов.

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

  1. Открыть в графическом редакторе файл исходного формата.
  2. Выполнить операцию Сохранить как… или операцию Экспортировать как… с выбором соответствующего типа файла в диалоговом окне.

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

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

Пример 9.1. Классификация растровых графических форматов.

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

В JPEG-формате нежелательно сохранять те изображения, где важны все тонкости цветопередачи, так как во время сжатия происходит отбрасывание некоторой цветовой информации. В этом формате следует сохранять только конечный вариант работы, потому что любое повторное сохранение приводит к новым потерям данных. Из-за существенных потерь качества изображения в профессиональной полиграфии этот формат не используется. Для просмотра изображения на экране монитора или для распечатки на принтере качества JPEG-формата вполне достаточно. JPEG — это не только графический формат, но и принцип сжатия. Он является одним из самых распространенных.

GIF-формат используется в web-дизайне для создания баннеров (рекламных заставок), элементов фона.

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

В полиграфии GIF-формат не используется.

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

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

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

Пример 9.2. Классификация графических форматов по степени универсальности в отношении ПО.

Какая информация записана в заголовке файла формата bmp

Basic Description
This file format is the MS-Windows standard format. It holds black&white-, 16-color, 256-color and Truecolor images. The palletized 16-color and 256-color images may be compressed via run length encoding. Notice there is also a OS/2-BMP format.

Name Size Description
Header 14 bytes Windows Structure: BITMAPFILEHEADER
0x00 Signature 2 bytes ‘BM’
0x02 FileSize 4 bytes File size in bytes
0x06 Reserved 4 bytes unused (=0)
0x0a DataOffset 4 bytes File offset to Raster Data
InfoHeader 40 bytes Windows Structure: BITMAPINFOHEADER
0x0e Size 4 bytes Size of InfoHeader =40
0x12 Width 4 bytes Bitmap Width
0x16 Height 4 bytes Bitmap Height
0x1a Planes 2 bytes Number of Planes (=1)
0x1c BitCount 2 bytes Bits per Pixel
1 = monochrome palette. NumColors = 1
4 = 4bit palletized. NumColors = 16
8 = 8bit palletized. NumColors = 256
16 = 16bit RGB. NumColors = 65536 (?)
24 = 24bit RGB. NumColors = 16M
0x1e Compression 4 bytes Type of Compression
0 = BI_RGB no compression
1 = BI_RLE8 8bit RLE encoding
2 = BI_RLE4 4bit RLE encoding
0x22 ImageSize 4 bytes (compressed) Size of Image
It is valid to set this =0 if Compression = 0
0x26 XpixelsPerM 4 bytes horizontal resolution: Pixels/meter
0x2a YpixelsPerM 4 bytes vertical resolution: Pixels/meter
0x2e ColorsUsed 4 bytes Number of actually used colors
0x32 ColorsImportant 4 bytes Number of important colors
0 = all
0x36 ColorTable 4 * NumColors bytes present only if Info.BitsPerPixel <= 8
colors should be ordered by importance
Red 1 byte Red intensity
Green 1 byte Green intensity
Blue 1 byte Blue intensity
reserved 1 byte unused (=0)
repeated NumColors times
Raster Data Info.ImageSize bytes The pixel data

Raster Data encoding

Pixels are stored bottom-up, left-to-right. Pixel lines are padded with zeros to end on a 32bit (4byte) boundary. For uncompressed formats every line will have the same number of bytes. Color indices are zero based, meaning a pixel color of 0 represents the first color table entry, a pixel color of 255 (if there are that many) represents the 256th entry. For images with more than 256 colors there is no color table.

Raster Data encoding for 1bit / black & white images

Raster Data encoding for 4bit / 16 color images

Raster Data encoding for 8bit / 256 color images

Raster Data encoding for 16bit / hicolor images

Raster Data encoding for 24bit / truecolor images

Raster Data compression for 4bit / 16 color images

Raster Data compression for 8bit / 256 color images

Trademarks, Patents and Royalties
To my knowledge: None.

Cross-Checking Software
This section is for programmers, who wish to cross-check their implementation with others. This is an incomplete list of programs, which are available as freeware / shareware / try-before-buy etc.

  • easiest: Make the file the MS-Windows’ background.
  • MS-Paint / Paintbrush
  • JASC Paint Shop Pro
  • JASC Paint Shop Pro
  • MS-Paint / Paintbrush

Paper Resources
MS-Windows SDK
[German:] Referenzhandbuch Dateiformate by Günter Born.

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

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