Начал понемножку осваивать Xlib, в режиме helloworldинга. Вот по этому туториалу.
Скажите, а как просто задать цвет Foreground тремя циферками, без всяких там colormap'ов и стандартных имен?
[решено] Xlib и цвета (А нельзя просто через RGB?)
Модератор: Модераторы разделов
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: [решено] Xlib и цвета
попробуйте вместо
написать (внеся соответственно все изменения в код)
то что должно было стать черным станет красным, а то что белым - голубым. Не знаю точно насчет формата хранения цвета в X, но скорее всего он следующий первые восемь бит - голубой, следующие 8 - зеленый, следующие - красный, последние 8 бит - возможно альфа канал.
так что скорее всего должен работать макрос:
но возможно, они расположены в обратном порядке тогда:
в общем, пробуйте! =)
Код: Выделить всё
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))
в общем, пробуйте! =)
-
- Сообщения: 847
- ОС: archlinux
Re: [решено] Xlib и цвета
Спасибо за наводку, начинаю понемногу понимать.
Но такой вариант, видимо, не подходит. Вот я попробовал на компе с 16битным дисплеем - и там получилось "rgbb" (то есть байт на красный, байт на зеленый - и два на синий). То есть это что-то очень низкоуровневое и железозависимое, на разных экранах по-разному будет
Давайте так сформулирую вопрос. Не видел ли кто-нибудь примера (с исходниками) программы на основе Xlib, рисующей радугу?
Но такой вариант, видимо, не подходит. Вот я попробовал на компе с 16битным дисплеем - и там получилось "rgbb" (то есть байт на красный, байт на зеленый - и два на синий). То есть это что-то очень низкоуровневое и железозависимое, на разных экранах по-разному будет

Давайте так сформулирую вопрос. Не видел ли кто-нибудь примера (с исходниками) программы на основе Xlib, рисующей радугу?

-
- Сообщения: 1341
- ОС: Arch Linux amd64
-
- Сообщения: 847
- ОС: archlinux
Re: [решено] Xlib и цвета
Короче, нашел. Вместо, скажем, цвета "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);
}