[ba.windows.x] need help with XGetImage screen dump via SUN rasterfile

chapman@lll-lcc.UUCP (Carol Chapman) (09/01/89)

     I am *still* having trouble doing what is essentially a screen
dump to a Tektronix (non-postscript) color printer.  I get the window
corresponding to an Athena vpaned widget and then create a pixmap of
that window.  I store the image data for that pixmap into a SUN
rasterfile.  (Header and colormap information are also in the
rasterfile, before the image data.)  Then I use system("cat rasterfile
| lpr -v -Ptcpr").  My program compiles and runs without complaint,
but the printer aborts the job.  I used another program called
xviewsun to try and look at my rasterfile.  There appears to be a
problem with the image data in the rasterfile.  Below is the short routine
that puts the image data into the rasterfile.  Does anyone see
anything wrong with this?  Do I need to call XCreateImage?  I didn't
think so, but threw it in just in case!  Do I need to associate a GC
with the pixmap (here called a_drawable)?

Thanks in advance,
carol chapman

/*****************************************************************************/

static unsigned char write_raster_image(fd, width, height, a_drawable, 
					raster_cmap)
     int fd;
     unsigned width, height;
     Drawable a_drawable;
     unsigned char *raster_cmap;
  
{
  unsigned bytes_returned = 0;    /* number of bytes written by write()      */
  unsigned num_bytes = 0;         /* total size in bytes of outer_vpaned     */
  unsigned char success = FALSE;  /* TRUE if raster file image is written
				     correctly                               */
  XImage *screen_image;           /* an image of outer_vpaned                */

  num_bytes = width * height;  /* determine total size of window in bytes */
  /* save the contents of the pixmap that is to be printed into an image */
  screen_image = XCreateImage(disp, vis, depth, ZPixmap, 0,
			      raster_cmap, width, height,
			      BitmapPad(disp), 0);
  screen_image = XGetImage(disp, a_drawable, 0, 0, width, height,
			   AllPlanes, ZPixmap);
  /* write the image data into the raster file after the colormap info */
  bytes_returned = write(fd, screen_image->data, num_bytes);
  if (bytes_returned != num_bytes) 
     xprintf(wp, "Problem writing raster file to printer.\n");
  else
     success = TRUE;  /* the raster file image was written correctly */
  XDestroyImage(screen_image);  /* the image is no longer needed - remove it */
  return(success);
}  /* of write_raster_image */


/*****************************************************************************/


-- 
-------------------------------------------------------------------------------
Livermore Lab            (chapman@lll-crg.llnl.gov or chapman@lll-lcc.llnl.gov)
P.O. Box 808, L-153      Tel. (415) 423-7876
Livermore, CA  94550     "Never own anything that you have to FEED or PAINT."