如何在X11图形编程中更改不同对象的图形颜色?

问题描述 投票:1回答:1

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

Example:这是通用代码,我们用于指定窗口显示的颜色,从而指定在其上绘制的对象的颜色。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);

     }
   }
 }
c unix graphics colors x11
1个回答
1
投票

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

XColor值具有颜色的R / G / B分类(回答后续问题)。您可以使用XAllocColor将R / G / B值转换为像素值(例如,参见XAllocColor)。

© www.soinside.com 2019 - 2024. All rights reserved.