Я пытаюсь установить фоновое изображение для одного из моих окон, созданных с помощью Xlib.
Я хотел бы, чтобы изображение было в формате JPEG или PNG. Я скачал DevIL (который я предпочитаю использовать, потому что он поддерживает много форматов).
Итак, мои вопросы, как мне это сделать? Я не могу найти какой-либо конкретный учебник или помощь.
Я понимаю, как я могу использовать DevIL для загрузки изображения в поток, но как мне поместить это в окно? Я нашел ответ здесь: Загрузите изображение в окно, используя xlib но я не знаю, как и какая функция должна получать байты изображения.
Как я также понимаю, у меня должен быть XImage, который будет содержать все изображение и который я буду использовать с XPutImage. Чего я не понимаю, так это как отправить байты изображения из DevIL в XImage.
Кто-нибудь знает какую-нибудь полезную страницу или, может быть, какие-то подсказки о том, как мне это сделать?
Спасибо!
Функция 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
, цвета будут выключены!
Других решений пока нет …