img_t

Описание изображения

Прототип:

#include <img.h>
typedef struct {
union {
struct {
uint8_t *data;
unsigned stride;
} direct;
struct {
img_access_f *access_f;
uintptr_t data;
} indirect;
} access;
unsigned w, h;
img_format_t format;
unsigned npalette;
img_color_t *palette;
unsigned flags;
union {
uint8_t index;
uint16_t rgb16;
img_color_t rgb32;
} transparency;
unsigned quality;
} img_t;

Описание:

Структура img_t описывает декодированный кадр и включает следующие поля:

access
Объединяет стркутуры direct и indirect в зависимости от того, как необходимо обеспечить доступ к данным изображения: напрямую или косвенно. Флаги IMG_DIRECT или IMG_INDIRECT определяют прямой или косфенный режима доступа.

При использовании IMG_DIRECT для работы изображением, обращаться к данным нужно напрямую через указатель. На начало данных изображения указывает direct.data и предполагается, что они являются непрерывным буфером из h строк сканирования и direct.stride байтов каждая.

Note: При необходимости stride может быть больше, чем фактическое количество байтов, необходимых для представления одной строки сканированияв указанном формате; при работе с изображением нельзя перезаписывать или иным образом обрабатывать "промежуточные" байты заполнения.

Применение IMG_DIRECT требует доступа к данным посредством функции; указатель функции задается в indirect.access_f, а indirect.data предоставляет возможность доступа функции к некоторому контексту.

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

void access_f( uintptr_t data, unsigned x, unsigned y, unsigned n, uint8_t *pixels );

data
Поле данных (из img_t::access.indirect.data).
x, y
Положение пикселя изображения, к которому осуществляется доступ.
n
Количество обрабатываемых пикселей.
pixels
Указатель на данные изображения. Если осуществялется функция чтения, то должно производитья копирование указанной серии данных изображения в другой буфер; в случае записи пиксели копируются из внешнего буфера в изображение.

Note: Формат данных в pixels будет таким же, как формат изображения: преобразования данных не производится. Аргументы x, y и n гарантированно не выходят за границы изображения, поэтому проверять их не нужно.

w, h
Ширина и высота кадра изображения в пикселях. Действительны только в том случае, если установлены биты флага IMG_W и IMG_H.
format
Формат img_format_t пиксельных данных изображения. Действителен только в том случае, если установлен бит флага IMG_FORMAT.
npalette
Количество цветов в таблице палитры изображения. Поле следует применять только в том случае, если формат основан на палитре (если установлен флаг IMG_FMT_PALETTE в format).
palette
Таблица цветов палитры. Поле следует применять только в том случае, если установлен бит флага IMG_PALETTE.
flags
Флаги, указывающие, какие из полей в структуре действительны:
IMG_TRANSPARENCY
Поле transparency действительно, указанный цвет в изображении следует рассматривать как прозрачный.
IMG_FORMAT
Поле format действительно.
IMG_W
Поле w действительно.
IMG_H
Поле h действительно.
IMG_DIRECT
Поле direct действительно.
IMG_INDIRECT
Поле indirect действительно.
IMG_PALETTE
Поле palette действительно.
IMG_QUALITY
Поле quality действительно.
transparency
Прозрачность цвета. Действителен, если установлен бит флага IMG_TRANSPARENCY. Поле объединения следует использовать в зависимости от формата изображения:
quality
Если установленфлаг IMG_QUALITY, кодеки могут обрабатывать поле quality. Например, img_codec_jpg.so будет использовать это значение для определения качества вывода при кодировании. При вызове img_write_file().

Классификация:

Графическая подсистема ЗОСРВ «Нейтрино», Библиотека Image

Тематические ссылки:

img_color_t, img_format_t, img_decode_callouts_t, img_decode_frame(), img_decode_validate(), img_load_file()




Предыдущий раздел: Image API