- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经使用 XCreateImage 创建了 XImage 并使用 XPutImage 将其显示在窗口上,但 XPutImage 仅在第二次调用时才显示此图片。为什么会这样?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
void draw(char *rgb_out, int w, int h)
{
int i = 0;
for (i = 0;i < w*h;i += 4) {
rgb_out[i + 1] = 0;
rgb_out[i + 2] = 0;
rgb_out[i + 3] = 0;
}
return;
}
XImage *create_ximage(Display *display, Visual *visual, int width, int height)
{
char *image32 = (char *)malloc(width * height * 4);
draw(image32, width, height);
return XCreateImage(display, visual, 24,
ZPixmap, 0, image32,
width, height, 32, 0);
}
int main(int argc, char **argv)
{
int win_b_color;
int win_w_color;
XEvent xev;
Window window;
GC gc;
Display *display = XOpenDisplay(NULL);
Visual *visual;
XImage *ximage;
win_b_color = BlackPixel(display, DefaultScreen(display));
win_w_color = BlackPixel(display, DefaultScreen(display));
window = XCreateSimpleWindow(display,
DefaultRootWindow(display),
0, 0, 600, 400, 0,
win_b_color, win_w_color);
gc = XCreateGC(display, window, 0, NULL);
visual = DefaultVisual(display, 0);
XMapWindow(display, window);
XFlush(display);
ximage = create_ximage(display, visual, 100, 100);
while (1) {
int r;
r = XPutImage(display, window,
gc, ximage, 0, 0, 0, 0,
100, 100);
printf("RES: %i\n", r);
XSync(display, 1);
XFlush(display);
getchar();
}
return 0;
}
最佳答案
诀窍是等待窗口被映射。您可以通过 Expose 事件来做到这一点。
int main(int argc, char **argv)
{
int win_b_color;
int win_w_color;
XEvent xev;
Window window;
GC gc;
Display *display = XOpenDisplay(NULL);
Visual *visual;
XImage *ximage;
win_b_color = BlackPixel(display, DefaultScreen(display));
win_w_color = BlackPixel(display, DefaultScreen(display));
window = XCreateSimpleWindow(display,
DefaultRootWindow(display),
0, 0, 600, 400, 0,
win_b_color, win_w_color);
visual = DefaultVisual(display, 0);
XSelectInput(display, window, ExposureMask | KeyPressMask);
XMapWindow(display, window);
XFlush(display);
gc = XCreateGC(display, window, 0, NULL);
ximage = create_ximage(display, visual, 100, 100);
XEvent event;
bool exit = false;
while (!exit) {
int r;
XNextEvent(display, &event);
if (event.type == Expose)
{
r = XPutImage(display, window,
gc, ximage, 0, 0, 0, 0,
100, 100);
printf("RES: %i\n", r);
}
else if (event.type == KeyPress)
exit = true;
}
return 0;
}
关于c - libX11 : XPutImage first call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30861472/
我有这些函数调用: OSPImgBlit(&img->_obj, &win1->_obj, 0, 0, 0, 0, 640, 480); OSPRun(&win1->_obj, OSPWND_SWAP
大家好,我上周末尝试在屏幕上放置 png 图像,但没有成功。我左右看看为什么,但无论我尝试什么,我似乎都找不到为什么有人能给我指出正确的方向? 我正在使用this作为模板。然后我查看了所有这些: li
我已经使用 XCreateImage 创建了 XImage 并使用 XPutImage 将其显示在窗口上,但 XPutImage 仅在第二次调用时才显示此图片。为什么会这样? #include #i
我尝试使用 xputimage 在 xwindow 中显示一个 png 文件。但是 xputimage 抛出以下错误: window width - '426'; height - '341' X E
我正在尝试创建一个 xlib 窗口,创建一个深度为 32 的帧缓冲区并将该缓冲区绘制到窗口,但是。一切正常,直到 XPutImage 被调用,窗口从不显示并且控制台输出: Process return
本文整理了Java中com.sun.jna.platform.unix.X11.XPutImage()方法的一些代码示例,展示了X11.XPutImage()的具体用法。这些代码示例主要来源于Gith
设置 使用 XLib,我正在创建每像素 32 位的窗口以及 32 bpp 的 XImage 对象。 起初我在窗口上绘制不透明的矩形以删除背景。 然后我尝试在窗口上绘制创建的半透明 XImage。 在这
我是一名优秀的程序员,十分优秀!