【问题标题】:Why dots cannot be drawn "smoothly" with XDrawPoint ( X Window )?为什么不能用 XDrawPoint ( X Window ) “平滑”绘制点?
【发布时间】:2014-01-29 07:22:14
【问题描述】:

这里是sn-p(Xlib)的代码:

void update_screen()
{
  int X,Y;
  for (X = 0; X < Wnd_X; X++)
    for (Y = 0; Y < Wnd_Y; Y++)
    {
      XDrawPoint(dsp, win, gc_2, X, Y);
      usleep(100);
    }

  return;
}

但它会是这样的:

然后:

为什么用 XDrawPoint 不能平滑地绘制点?

以及如何流畅地用绿色填充窗口?

完整代码在这里:

#include <X11/Xlib.h> // must precede most other headers!
#include <stdlib.h>

int Wnd_X=500;
int Wnd_Y=500;

void update_screen();

GC gc_2;
Window win;
Display *dsp;

int main()
{
  dsp = XOpenDisplay(NULL);
  int screen = DefaultScreen(dsp);
  win = XCreateWindow(dsp, DefaultRootWindow(dsp), 0, 0, Wnd_X, Wnd_Y, 0, 0, 0, 0, 0, 0);
      //XCreateSimpleWindow(dsp, DefaultRootWindow(dsp), 0, 0, Wnd_X, Wnd_Y, 0, 0x000000, 0xFFFFFF);
  Atom wmDelete = XInternAtom(dsp, "WM_DELETE_WINDOW", True);
  XSetWMProtocols(dsp, win, &wmDelete, 1);

  XGCValues gcvalues_2;
  gcvalues_2.function = GXcopy;
  gcvalues_2.plane_mask = AllPlanes;
  gcvalues_2.foreground = 0x00FF00;
  gcvalues_2.background = 0xFFFFFF;
  gc_2 = XCreateGC(dsp, win, GCFunction|GCPlaneMask|GCForeground|GCBackground, &gcvalues_2);

  XEvent evt;
  long eventMask = StructureNotifyMask;
  eventMask |= ButtonPressMask|ButtonReleaseMask|KeyPressMask|KeyReleaseMask;
  XSelectInput(dsp, win, eventMask);

  XMapWindow(dsp, win);

  // wait until window appears
  do { XNextEvent(dsp,&evt); } while (evt.type != MapNotify);

  update_screen();
  XDestroyWindow(dsp, win);
  XCloseDisplay(dsp);

  return 0;
}

void update_screen()
{
  int X,Y;
  for (X = 0; X < Wnd_X; X++)
    for (Y = 0; Y < Wnd_Y; Y++)
    {
      XDrawPoint(dsp, win, gc_2, X, Y);
      usleep(100);
    }

  return;
}

【问题讨论】:

  • 您是否必须要求ulseep(100)?它会导致像素绘图延迟。
  • @jayeshbhoi 这是必须的。 :-) 没有它,窗口将立即被填满。
  • 好的,但是你有没有使用 (x11)xilb 和其他工具如 OpenGL ES 进行填充,或者你可以使用XFillRectangle() api 来获取窗口大小。

标签: c xlib


【解决方案1】:

您需要将更新刷新到 X 服务器。试试这个:

XDrawPoint(dsp, win, gc_2, X, Y);
XFlush(dsp);
usleep(100);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多