Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Структура графического файла




Кодирование графических изображений

Цифровое изображение представляет собой прямоугольную таблицу точек, или элементов изображения, расположенных в строках и столбцах. Выражение называется разрешением изображения (хотя иногда этот термин используется для обозначения числа пикселей, приходящихся на единицу длины изображения). Точки изображения называются пикселами (за исключением случаев, когда изображение передается факсом или видео; в этих случаях точка называется пелом). Для целей сжатия графических образов удобно выделить следующие типы изображений:

 

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

 

2. Полутоновое изображение. Каждый пиксел такого изображения может иметь значений от 0 до, обозначающих одну из градаций серого (или иного) цвета. Число обычно сравнимо с размером байта, то есть, оно равно 4, 8, 12, 16, 24 или другое кратное 4 или 8. Множество самых значимых битов всех пикселов образуют самую значимую битовую плоскость или слой изображения. Итак, полутоновое изображение со шкалой из уровней составлено из битовых слоев.

 

3. Цветное изображение. Существует несколько методов задания цвета, но в каждом из них участвуют три параметра. Следовательно, цветной пиксел состоит из трех частей. Обычно, цветной пиксел состоит из трех байтов. Типичными цветовыми моделями являются RGB, HLS и CMYK.

 

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

 

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

 

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

 

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

 

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

 

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

 

typedef struct tagBITMAPFILEHEADER {

WORD bfType;

DWORD bfSize;

WORD bfReserved1;

WORD bfReserved2;

DWORD bfOffBits;

} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER,

*PBITMAPFILEHEADER;

 

bfType – должен содержать два ASCII-символа: "BM", которые разумеется обозначают bitmap. Соответствующие шестнадцатеричному значению равному 0x424D. При других значения этого поля файл не является растровым изображение, принятым в Microsoft Windows.

BfSize – равен размеру файла в байтах. Его можно использовать для определения целостности файла, а также для выделения нужно количества памяти под весь файл. Значение bfSize не является размером самого растрового изображения в памяти.

BfReserved1 – не документировано и не используется.

BfReserved2 – не документировано и не используется.

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

 

Второй блок размером в 40 байт содержит информацию о характеристиках самого растрового изображения и описывается структурой 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, FAR *LPBITMAPINFOHEADER,

*PBITMAPINFOHEADER;

 

biSize – содержит собственный размер структуры BITMAPINFOHEADER в байтах. Это значение должно быть равно 0x28.

biWidth – содержит ширину изображения в пикселях.

biHeight – содержит высоту изображения в пикселях.

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

biBitCount – содержит число бит на пиксел. Должно иметь значение 1,4, 8 или 24. Обычно используется в конъюнкции с biClrUsed и biClrImportant.

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

BiSizeImage – содержит размер растрового изображения в байтах. Может быть нулевым, если изображение не сжато.

BiXPelsPerMeter – указывает предпочтительное разрешение по горизонтали в пикселах на метр.

BiYPelsPerMeter – указывает предпочтительное разрешение по вертикали в пикселах на метр.

BiClrUsed – обычно содержит число цветов, используемое в растровом изображении и определяемое массивом bmiColors типа RGBQUAD. Если этот параметр равен нулю, как это обычно и бывает, в изображении используется максимальное количество цветов, возможное для изображения данного типа.

BiClrImportant – содержит число важных цветов изображения. Если этот параметр равен нулю, то все цвета в изображении считаются важными.

 

За структурой BITMAPINFOHEADER следует массив структур RGBQUAD. Структуры RGBQUAD определяют RGB значения интенсивности для каждого из цветов в палитре устройства. В двадцатичетырёхбитных изображениях массив структур RGBQUAD является цветовым массивом и палитра отсутствует. А также в структурах RGBQUAD может отсутствовать последняя запись - rgbReserved. В монохромных, четырёх и восьмибитных растровых изображения массив структур RGBQUAD является палитрой, а значение каждого пиксела индексам в этом массиве.

 

typedef struct tagRGBQUAD {

BYTE rgbBlue;

BYTE rgbGreen;

BYTE rgbRed;

BYTE rgbReserved;

} RGBQUAD;

typedef RGBQUAD FAR* LPRGBQUAD;

 

rgbBlue – содержит интенсивность синего цвета. Допустимые значения 0-255.

rgbGreen – содержит интенсивность зелёного цвета. Допустимые значения 0-255.

rgbRed - содержит интенсивность красного цвета. Допустимые значения 0-255.

rgbReserved – не используется. Должно быть нулю.

 

Также Bitmap можно описать структурой BITMAPINFO. Она включает в себя структуру BITMAPINFOHEADER и массив структур RGBQUAD.

 

typedef struct tagBITMAPINFO { // bmi

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColors[1];

} BITMAPINFO;

 

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

 

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




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 1254; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.031 сек.