2008-12-06 3 views
2

Я начинаю кодировать свой собственный оконный менеджер и задавался вопросом, как использовать xorg api для получения из необработанных данных изображения (например, данных, предоставленных libpng), в Xorg Pixmap или что-то еще вытаскиваемый Xorg?Xorg loading image

ответ

1

XCreatePixmapFromBitmapData должен делать именно это. Помните, что вам нужно передавать данные с той же глубиной, что и ваш xserver.

3

Вы, вероятно, обнаружили это в какой-то момент с 2008 года, но на благо будущих читателей ...

XCreatePixmapFromBitmapData() загружает буквального растрового изображения (то есть 1-битовые, черный & белый) данных в пиксельной. Скорее всего, это не то, что вы хотите, если целью является загрузка из PNG.

Новый способ сделать это - использовать Cairo или GdkPixbuf. API-интерфейсы Xlib старой школы, такие как XCreatePixmapFromBitmapData() и XDrawWhatever(), в значительной степени устарели (не то, что они действительно будут удалены когда-либо, но они устарели и не синхронизированы с тем, как работают современные приложения).

Путь люди обычно рекомендуют делать вещи в эти дни:

  • предпочитают libxcb к libx11, libxcb просто очень тонкая оболочка вокруг протокола X и недостатки вызовов, которые делают несколько запросов протокола X (например, CreatePixmapFromBitmapData делает CreatePixmap, CreateGC, PutImage, FreeGC)
  • предпочитают Каиром (или сопоставимую библиотеку, Skia один) на стороне сервера рисования API для

Вы можете использовать cairo_image_surface_create_from_png() для Simp le или GdkPixbuf, если вам нужно поддерживать больше форматов и т. д.

0

Есть небольшой танец с XCreateImage, XCreatePixmap и XCopyArea, которые вам нужно сделать. Это выглядит примерно так:

struct Image img = get_pixels_and_geometry_from_libpng("filename.png"); 
XImage *img = XCreateImage(/*5000 paremeters*/); 
Pixmap pixmap = XCreatePixmap(dpy, img.width, img.height, 24); 
XPutImage(dpy, pixmap, gc, 0, 0, img.width, img.height); 
XCopyArea(dpy, pixmap, window, 0, 0, img.width, img.height, x, y); 

 Смежные вопросы

  • Нет связанных вопросов^_^