gpt4 book ai didi

c - X11图形编程如何改变不同对象的图形颜色?

转载 作者:太空宇宙 更新时间:2023-11-04 03:37:26 25 4
gpt4 key购买 nike

我想为在 X11 图形窗口上绘制的不同对象设置不同的颜色。

示例:这是我们用来指定窗口显示颜色以及绘制在其上的对象的通用代码。
XAllocNamedColor(display, DefaultColormap(display, screen),"red", &color,&dummy);

在下面的代码中,直线和矩形都显示为红色。有什么方法可以显示红色的线条和蓝色的矩形?我需要对代码进行哪些更改?

#include <stdio.h>
#include <X11/Xlib.h>
#include <unistd.h>
#include <math.h>
#include "time.h"
#include "sys/time.h"


Display *display;
Window window;
XSetWindowAttributes attributes;
XGCValues gr_values;
XFontStruct *fontinfo;
GC gr_context;
Visual *visual;
int depth;
int screen;
XEvent event;
XColor color, dummy;

main (argc, argv)
char *argv[];
int argc;
{


display = XOpenDisplay(NULL);
screen = DefaultScreen(display);
visual = DefaultVisual(display,screen);
depth = DefaultDepth(display,screen);
attributes.background_pixel = XWhitePixel(display,screen);

window = XCreateWindow( display,XRootWindow(display,screen),
0, 0, 1250, 1200, 5, depth, InputOutput,
visual ,CWBackPixel, &attributes);
XSelectInput(display,window,ExposureMask | KeyPressMask) ;
fontinfo = XLoadQueryFont(display,"6x10");

XAllocNamedColor(display, DefaultColormap(display, screen),"red",
&color,&dummy);

gr_values.font = fontinfo->fid;
gr_values.foreground = color.pixel;


gr_context=XCreateGC(display,window,GCFont+GCForeground, &gr_values);


XFlush(display);
XMapWindow(display,window);
XFlush(display);

while(1){
XNextEvent(display,&event);

switch(event.type){
case Expose:

XDrawLine(display,window,gr_context,800,800, 400, 450);

XDrawRectangle(display,window,gr_context,i+10,j+10, 200, 150);

break;

case KeyPress:
XCloseDisplay(display);
exit(0);

}
}
}

最佳答案

在 X11 中,您可以将颜色添加到图形上下文 (GC),作为参数传递给 XDrawLine 等。您的程序可能调用 XCreateGC 来创建图形上下文。您可以通过对其掩码 GCForeground 和/或 GCBackground 进行“或”运算来设置前景色和/或背景色,然后复制从 XAllocNamedColor 获得的 Pixel 值(在XColor 值)到创建 GC 时 XGCValues 的前景/背景结构成员。

XColor 值具有颜色的 R/G/B segmentation (回答后续问题)。您可以使用 XAllocColor将 R/G/B 值转换为像素值(参见示例 Read Only Colorcells: An easy Example )。

关于c - X11图形编程如何改变不同对象的图形颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31379083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com