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 будет нулевым в этом случае).

Другие вопросы по тегам