My goal is to open a window in the X-server and plot a series of pixels. However, I find many examples I have tried to draw to a window fail and the window remains blank. Therefore, I am here requesting information. I do not know c, and am a beginner. Currently, I am using a mix-match of code, running against the gcc compiler finding errors and fixing them as I go along. I have experienced segmentation faults, but the following code produces a minimal amount of error.
/* window.c --This program opens a window on the display
* Use "gcc -o window window.c -L/usr/X11R6/lib -lX11
* to compile this code.
*/
#include <X11/X.h>
#include <X11/Xlib.h>
#include<stdio.h>
#define width 320
#define height 200
int main(void)
{
Display *display;
Window window, rootwindow;
int screen;
GC gc;
XImage *img=NULL;
int x;
int y;
display = XOpenDisplay(NULL);
screen = DefaultScreen(display);
gc = DefaultGC(display, screen);
rootwindow = RootWindow(display,screen);
window = XCreateSimpleWindow(display, rootwindow,
0, 0, width, height, 1, 0, 0);
XMapWindow(display, window);
XImage *xi;
unsigned long pixelvalue1;
xi = XCreateImage(display, 0, 8, ZPixmap,
0, malloc(width*height), width, height,
8, 0);
pixelvalue1 = 65535;
for (x = 0; x < width/2; x++)
{
for(y = 0; y < height/2; y++)
{
XPutPixel(xi, x, y, pixelvalue1);
}
}
printf("putting image\n");
XPutImage(display, window, gc, xi, 0, 0, 0, 0, width, height);
sleep (5);
return (0);
}
The result of this code, is to open a window (which it does) for 5 seconds/cycles, and also plot a series of pixels half the length of the width and height specified.
However, what actually happens is it opens a window with a black background, plots nothing, and I am left frustrated with little resources. I suspect the problem may lie in either XCreateImage, or XPutPixel commands. I suspect I have not got the right values for either command.
Can anyone here offer a simple solution to my problem of wanting to plot pixels to a window?
Finally - I would like to elabroate on my plans...
I intend to further the pixel plotting using double buffering, for a simple animation routine I written in PHP graphics. As animation is not available in PHP, this is the reason for myself attempting c coding without any prior knowledge of the c language. However, I do have a basic grasp of BASIC (if, for, while etc), and constant/variable declaration (int, long, double etc).
Please can someone enlighten me with a code snippet as to how I can accomplish my goal of plotting individual pixels to the screen.
Much thanks,
Alux.