X11 - поставить изображение в формате XY
Библиотека XCB обеспечивает функцию xcb_put_image
, Сигнатура функции:
xcb_void_cookie_t xcb_put_image(
xcb_connection_t *conn,
uint8_t format,
xcb_drawable_t drawable,
xcb_gcontext_t gc,
uint16_t width, uint16_t height,
int16_t dst_x, int16_t dst_y,
uint8_t left_pad,
uint8_t depth,
uint32_t data_len, const uint8_t *data
)
Функция заполняет данные drawable
(окно / растровое изображение) с цветами пикселей из data
, format
Аргумент указывает, как данные должны интерпретироваться X-сервером.
Одно из трех возможных значений format
XCB_IMAGE_FORMAT_XY_PIXMAP, что означает, что байты содержатся в data
следует интерпретировать как растровое изображение XY (три последовательных изображения в градациях серого - по одному для каждого канала RGB).
Вот моя проблема: предположим, что я хочу заполнить растровое изображение желтым прямоугольником 10х10 и использовать формат растрового изображения XY. Для этого мне нужно заполнить data
с data_len
байт. Каким должно быть количество и значения байтов в массиве?
1 ответ
Это зависит от визуального элемента, который используется для рисования. Вы действительно не хотите знать все подробности о визуальных элементах, но https://tronche.com/gui/x/xlib/window/visual-types.html - хорошее начало.
Если вы свободны в предположении, что "нормальный" сервер X11 имеет порядок байтов с прямым порядком байтов, ваш визуальный объект, скорее всего, будет иметь тип TrueColor с одним байтом для красного, зеленого и синего. Затем можно получить желтый, смешав полный красный и зеленый без синего.
Я не помню определение XYPixmap, но если вы правы, то для этого потребуются 200 байтов со значением 255, за которыми следуют 100 байтов со значением 0. (left_pad будет нулевым в этом случае).