[comp.windows.x] XR4 window problem

waynec@lion.cis.ohio-state.edu (Wayne Carlson) (09/27/90)

I have an x-window procedural question that someone out there might 
be able to answer.

I need to create an X-window for an interactive graphics project.
Since I can't determine the pixel value in the X-window, I have
opted to use the XImage structure provided in Xlib to keep a
duplicate copy of the window, from which I can use GetPixel to
read the value. Now the problem.

Since I am using XDrawLine to create the image in the window, and
since the graphics primitives don't draw directly to the XImage
structure, I have chosen to use XGetSubImage to move the rectangle
that bounds the newly drawn line into the Image structure. When I 
invoke the call, I get the following error message:

***************
X Error of failed request: BadValue (integer parameter out of range
for operation)
  Major opcode of failed request: 73 (X_GetImage)
  Minor opcode of failed request: 0
  Resource id in failed request: 0x0
  Serial number of failed request: 13
  Current serial number in output stream: 13
***************


We are running R4 on aa SPARCstation SLC. The following is the 'c' code
for the window and image stuff:

  if ((dpy = XOpenDisplay(NULL)) == NULL)
    fperr("Couldn't open display!");

  windowwidth = windowheight = 600;
  window = XCreateWindow(dpy, RootWindow(dpy, DefaultScreen(dpy)),
		  20, 20, windowwidth, windowheight, 1,
		  DefaultDepth(dpy, DefaultScreen(dpy)), CopyFromParent, 
		  &visual, (CWBackPixel | CWBorderPixel | CWBackingStore),
			 &attributes);

  depth = 1;
  format = XYBitmap;
  bitmap_pad = 32;

  ximage = XCreateImage(dpy,DefaultVisual(dpy,screen),depth,
		  format,0,0,windowwidth,windowheight,bitmap_pad,0);

  ximage->data = malloc((ximage->bytes_per_line)*windowheight);
  if (ximage->data == 0) fperr("Error in malloc() for XImage");

  if (ximage == 0) fperr("Error creating XImage\n");

	.
	.
	.

    XDrawLine(dpy, window, gc, cx, cy, *x, windowheight - *y);

    XGetSubImage(dpy,window,cx,windowheight-cy,abs(*x-cx)+1,abs(windowheight-*y-cy)+1,-1,format,ximage,cx,windowheight-cy);


cx and cy have the current value of x and y (from a 'moveto' command.
x and y have the values to which the line should be drawn. In the debug
program, cx=cy=10 and x=y=50. I added the +1 in the XGetSubImage command
to compensate for a null rectangle in the event of a vertical or
horizontal line.

Any clues?
Thanks...
please email to

waynec@cis.ohio-state.edu

Wayne Carlson