rbd@lamont.ldgo.columbia.edu (roger davis) (08/22/89)
Thanks to all who responded to my request for help
in speeding up XImage pixel operations. The answer
(provided by rws) is (a) wait for R4, which promises
major speedups in XImage pixel ops, or (b) access
pixels directly, rather than using XPutPixel().
Being impetuous, I did (b). The following code, when
executing the newly-added #ifdefs, decreases the processing
time of a 512x512 8-bit color image on a Sun 4/280
from ~8 minutes to ~8 **seconds**.
extern Display *dpy;
extern Visual visual;
extern int width, height;
create_image()
{
int line, col;
char *pix;
unsigned long pixel;
XImage *image;
image= XCreateImage(dpy, &visual, 8, ZPixmap, 0, (char *) NULL, width, height, 8, 0);
image->data= calloc((unsigned) (image->bytes_per_line*height), sizeof(char));
for (line= 0; line < height; line++) {
#ifdef sun
pix= image->data+(line*image->bytes_per_line);
#endif
for (col= 0; col < width; col++) {
pixel= (unsigned long) ... whatever you want
#ifdef sun
*pix= (char) pixel;
pix++;
#else
XPutPixel(image, col, line, pixel);
#endif
}
}
}
--
Roger Davis
Lamont-Doherty Geological Observatory
rbd@lamont.ldgo.columbia.edu