How to draw an image from file on window with Xlib
10,798
Generally you create your own loader to grab the pixels out of whatever image format you need.
Then, you use XCreateImage
to make an XImage
, which you put, using XPutImage
, on an offscreen pixmap you generate with XCreatePixmap
. Once you have your pixmap, you paint it to the window with XCopyArea
. You must re-copy the image on any expose events.
Author by
user725803
Updated on June 13, 2022Comments
-
user725803 almost 2 years
This is my code:
int main() { Display *d = XOpenDisplay(0); unsigned int bitmap_width, bitmap_height; int x, y; Pixmap bitmap; if ( d ) { Window w = XCreateWindow(d, DefaultRootWindow(d), 0, 0, 400, 400, 0, CopyFromParent, CopyFromParent,CopyFromParent, 0, 0); GC gc = XCreateGC ( d, w, 0 , NULL ); int rc = XReadBitmapFile(d, w, "1.bmp", &bitmap_width, &bitmap_height, &bitmap, &x, &y); XCopyPlane(d, bitmap, w, gc,0, 0, bitmap_width, bitmap_height,0, 0, 1); XMapWindow(d, w); XFlush(d); sleep(10); } return 0; }
But window is clear. I do not understand why it is not working. Where did I make mistake?
-
Cody Gray almost 13 yearsThe first two mistakes include not formatting your code correctly, and not tagging your question with the programming language you're using.
-
Sebastian Mach almost 13 yearswhy do you sleep ten seconds?
-
user725803 almost 13 yearsSorry, I'm new user and forgot about formatting. 10 seconds I sleep for viewing window
-
mctylr over 9 years@phresnel: The sleep is done instead of writing any event handling code, which is distracting and irrelevant to the issue at hand. It simply maps the window (draws it to the screen), the
XFlush
forces the window to be displayed (the X protocol is asynchronous), wait for 10 seconds and then (rudely) destroy the window and teardown the connection to the X server by simply exiting (atreturn 0
).
-