[решено] Xlib и цвета (А нельзя просто через RGB?)

Модератор: Модераторы разделов

dergachev
Сообщения: 847
ОС: archlinux

[решено] Xlib и цвета

Сообщение dergachev »

Начал понемножку осваивать Xlib, в режиме helloworldинга. Вот по этому туториалу.

Скажите, а как просто задать цвет Foreground тремя циферками, без всяких там colormap'ов и стандартных имен? 
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: [решено] Xlib и цвета

Сообщение RasenHerz »

попробуйте вместо

Код: Выделить всё

    black=BlackPixel(dis,screen),    /* get color black */
    white=WhitePixel(dis, screen);  /* get color white */


написать (внеся соответственно все изменения в код)

Код: Выделить всё

    red=0xff0000,
    blue=0x0000ff;

то что должно было стать черным станет красным, а то что белым - голубым. Не знаю точно насчет формата хранения цвета в X, но скорее всего он следующий первые восемь бит - голубой, следующие 8 - зеленый, следующие - красный, последние 8 бит - возможно альфа канал.
так что скорее всего должен работать макрос:

Код: Выделить всё

#define GET_COLOR (R, G, B) ((unsigned long)((R) | ((G) << 8) | ((B) << 16))

но возможно, они расположены в обратном порядке тогда:

Код: Выделить всё

#define GET_COLOR (R, G, B) ((unsigned long)((B) | ((G) << 8) | ((R) << 16))

в общем, пробуйте! =)
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] Xlib и цвета

Сообщение dergachev »

Спасибо за наводку, начинаю понемногу понимать.

Но такой вариант, видимо, не подходит. Вот я попробовал на компе с 16битным дисплеем - и там получилось "rgbb" (то есть байт на красный, байт на зеленый - и два на синий). То есть это что-то очень низкоуровневое и железозависимое, на разных экранах по-разному будет :wacko:

Давайте так сформулирую вопрос. Не видел ли кто-нибудь примера (с исходниками) программы на основе Xlib, рисующей радугу? :pooh_on_ball:
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: [решено] Xlib и цвета

Сообщение RasenHerz »

вот - надеюсь вам поможет.
Спасибо сказали:
dergachev
Сообщения: 847
ОС: archlinux

Re: [решено] Xlib и цвета

Сообщение dergachev »

Короче, нашел. Вместо, скажем, цвета "gray" пишем "RGBi:128/128/128" - это тоже допустимое имя цвета! И там вроде еще много всяких вариантов. Окончательно это у меня вышло так:

Код: Выделить всё

void x_setcolor(const char *name) {
    XColor tmp;
    XParseColor(dis, DefaultColormap(dis,screen),name, &tmp);
    XAllocColor(dis,DefaultColormap(dis,screen),&tmp);
    XSetForeground(dis,gc,tmp.pixel);
}

void x_setcolor_rgb(int r, int g, int b) {
    char str[50];
    sprintf(str,"RGBi:%lg/%lg/%lg",((double)r)/255.,((double)g)/255.,((double)b)/255.);
    x_setcolor(str);
}
Спасибо сказали: