我正在使用C中X11库中的XDrawPoint(d, w, DefaultGC(d, s), x, y) ;在屏幕上绘制一个点。 xy是将在其中绘制点的x和y坐标。

问题是,如果要绘制XDrawPoint(d, w, DefaultGC(d, s), -x, y) ;,则该点不会显示在屏幕上。我认为这是因为初始位置设置为0,0使得该点消失了。

是否可以在屏幕中间设置起始位置,所以在绘制负的x和y坐标时,这些点仍会显示吗?

谢谢

最佳答案

AFAIK,调用XDrawPoint()时无法从左上角更改原点。

尽管XDrawPoints()允许您指定CoordModePrevious的模式来指定相对于前一个坐标,但我假设您不想在每个点之前在窗口中心绘制一个点。

实现绘图中心原点的一种可能方法是自己计算并将点添加为偏移量

使用简单的结构:

typedef struct {
    int x;
    int y;
} ORIGIN;

ORIGIN origin;


然后将其设置到窗口w的中间:

Window       urw;              // unused root window
unsigned int ux, uy, ub, ud;   // unused width, height, border, depth
unsigned int w, h;

XGetGeometry(d, w, &urw, &ux, &uy, &w, &h, &ub, &ud);

origin.x = w/2;
origin.y = h/2;


最后将其用作绘图的偏移量:

XDrawPoint(d, w, DefaultGC(d, s), origin.x+x, origin.y+y);


当然,如果要调整窗口大小,则必须重新计算原点,并且除以2时,奇数大小将被截断。

关于c - 如何使用XDrawPoint设置起始位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25983149/

10-12 17:27