Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_курс_кэм_new.doc
Скачиваний:
14
Добавлен:
06.02.2016
Размер:
653.82 Кб
Скачать
    1. Критические блоки

Этот раздел описывает стандартные блоки, которые должны поддерживаться любой программой чтения и записи PNG.

    1. Заголовочный блок

Заголовочный блок содержит информацию о данных изображения в PNG файле. Этот блок должен быть первым блоком в потоке данных PNG и следует непосредственно за подписью PNG. Область данных заголовочного блока составляет 13 байт и имеет следующий формат:

typedef struct _IHDRChunk

{

DWORD Width; /* Ширина изображения в пикселях */

DWORD Height; /* Высота изображения в пикселях */

BYTE BitDepth; /* Количество битов на пиксель и образец */

BYTE ColorType; /* Индикатор интерпретации цвета */

BYTE Compression; /* Индикатор типа сжатия */

BYTE Filter; /* Индикатор типа фильтра */

BYTE Interlace; /* Тип использованной схемы чересстрочной развёртки */

} IHDRCHUNK;

Поля Width и Height - высота и ширина растрового изображения в пикселях. Принимают значения от 1 до 231-1.

BitDepth - количество битов на пиксель для изображений с индексированными цветами и количество битов на образец для чёрно-белых изображений и полноцветных изображений (24 бита). У индексированных изображений BitDepth может принимать значения 1, 2, 4 и 8. У чёрно-белых - 1, 2, 4, 8 и 16. У полноцветных изображений без альфа данных, а также у чёрно-белых изображений с альфа данными, BitDepth может принимать только значения 8 и 16.

ColorType определяет способ интерпретации данных изображения. Принимаемые значения (вид изображения): 0 (чёрно-белое), 2 (полноцветное), 3 (индексированное изображение), 4 (чёрно-белое с альфа данными) и 6 (полносветное с альфа данными).

Compression определяет вид сжатия данных изображения. В настоящее время единственное допустимое значение - 0, означающее, что использован метод сжатия Defalte. Другие методы сжатия будут определены в будущих добавлениях PNG.

Filter определяет вид фильтрования, применённый к данным изображения перед сжатием. На сегодняшний день, единственное допустимое значение - 0, означающее, что был применён метод фильтрования adaptive, описанный в спецификации PNG. Другие методы фильтрования будут определены в будущих добавлениях PNG. Значение поля filter не указывает, были ли данные изображения профильтрованы; на это указывает байт filter type в начале каждой строки развёртки. Данные изображения не обязательно должны быть профильтрованы перед сжатием.

Interlace определяет чересстрочный алгоритм, используемый для хранения данных изображения, или, если быть более точным, порядок передачи пиксельных данных. Принимаемые значения - 0 (нет чересстрочности) и 1 (чересстрочность Adam7).

    1. Палитра

Палитра (PLTE) всегда присутствует в потоках данных PNG, содержащих изображения с индексированными цветами (когда поле Color заголовочного блока имеет значение 3). Полноцветные потоки данных PNG (значения поля Color - 2 и 6) также могут содержать палитру, предназначенную для разбития данных изображения на подгруппы приложениями, не поддерживающими полноцветную палитру. Поток данных PNG не может содержать более одной палитры.

Палитра может быть размером от 3 до 768 байт и имеет следующий формат:

typedef struct _PLTEChunkEntry

{

BYTE Red; /* Красный компонент (0 = чёрный, 255 = максимум оттенка) */

BYTE Green; /* Зелёный компонент (0 = чёрный, 255 = максимум оттенка) */

BYTE Blue; /* Синий компонент (0 = чёрный, 255 = максимум оттенка) */

} PLTECHUNKENTRY;

PLTECHUNKENTRY PLTEChunk[];

PLTEChunk - массив, содержащий от 1 до 256 элементов, каждый из которых содержит 3 поля: Red, Green и Blue, хранящие соответственно значения красного, зелёного и синего цветов для данного элемента палитры.