我正在使用C中的X11庫中的XDrawPoint(d, w, DefaultGC(d, s), x, y) ;
在屏幕上繪製一個點。 x
和y
是要繪製點的x和y座標。如何使用XDrawPoint設置起始位置
問題是,如果我想繪製XDrawPoint(d, w, DefaultGC(d, s), -x, y) ;
該點不顯示在屏幕上。我認爲這是因爲初始位置設置爲0,0,這使得點消失。
是否可以在屏幕中間設置起始位置,因此當繪製負x和y座標時,點仍顯示出來?
感謝
我正在使用C中的X11庫中的XDrawPoint(d, w, DefaultGC(d, s), x, y) ;
在屏幕上繪製一個點。 x
和y
是要繪製點的x和y座標。如何使用XDrawPoint設置起始位置
問題是,如果我想繪製XDrawPoint(d, w, DefaultGC(d, s), -x, y) ;
該點不顯示在屏幕上。我認爲這是因爲初始位置設置爲0,0,這使得點消失。
是否可以在屏幕中間設置起始位置,因此當繪製負x和y座標時,點仍顯示出來?
感謝
據我所知,沒有辦法打電話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
如果我的屏幕尺寸是300×300,那麼你的解決方案將150和x加到y座標上?事情是,我試圖在每個八分區中繪製一條線,並交換x1,x2,y1,y2,因爲該線不反映線,它將其繪製在其他地方。 – 2014-09-23 16:01:35
我想我誤解了這個問題。我的印象是你想要的座標範圍從0變到300到-150到+150。 – polarysekt 2014-09-24 00:16:13
分在任何計算您的點的座標,你想要的系統,然後變換座標,只需奇大小將截斷中然後將它們發送到'XDraw ...'函數。 – 2014-09-23 23:12:04