изображение — C ++ (LINUX) установить фон окна X11 с DevIL

Я пытаюсь установить фоновое изображение для одного из моих окон, созданных с помощью Xlib.
Я хотел бы, чтобы изображение было в формате JPEG или PNG. Я скачал DevIL (который я предпочитаю использовать, потому что он поддерживает много форматов).

Итак, мои вопросы, как мне это сделать? Я не могу найти какой-либо конкретный учебник или помощь.
Я понимаю, как я могу использовать DevIL для загрузки изображения в поток, но как мне поместить это в окно? Я нашел ответ здесь: Загрузите изображение в окно, используя xlib но я не знаю, как и какая функция должна получать байты изображения.
Как я также понимаю, у меня должен быть XImage, который будет содержать все изображение и который я буду использовать с XPutImage. Чего я не понимаю, так это как отправить байты изображения из DevIL в XImage.

Кто-нибудь знает какую-нибудь полезную страницу или, может быть, какие-то подсказки о том, как мне это сделать?
Спасибо!

2

Решение

Функция Xlib, используемая для создания XImage является XCreateImage, и его использование выглядит следующим образом (вы можете прочитать полное описание в ссылке):

XImage *XCreateImage(display, visual, depth, format, offset, data,
width, height, bitmap_pad, bytes_per_line)

где соответствующий аргумент для вашего конкретного вопроса будет данные, char* это указывает на то, где вы храните данные изображения, загруженные с DevIL. При этом вы должны быть в состоянии следовать шагам в другом ответе вы уже нашли.

Отредактировано, чтобы добавить:

Вы все еще должны сказать DevIL, как отформатировать данные изображения, чтобы XCreateImage мог их понять. Например, следующая пара вызовов функций создаст XImage, который отображается правильно:

ilCopyPixels(
0, 0, 0,
image_width, image_height, 1,
IL_BGRA, IL_UNSIGNED_BYTE,
image_data
);

// ...

XImage* background = XCreateImage(
display,
XDefaultVisual(display, XDefaultScreen(display)),
XDefaultDepth(display, XDefaultScreen(display)),
ZPixmap,
0,
image_data,
image_width,
image_height,
32,
0
);

, если вы выбрали вместо IL_RGBA, цвета будут выключены!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]