Имея только минимальные знания C, я собрал следующий код, который я компилирую в Linux Mint 19:
gcc-7 -o getPixelColor getPixelColor.c -L/usr/X11/lib -lX11
и выполнить без аргумента:
./getPixelColor
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <stdio.h>
void get_pixel_color(Display *d, int x, int y, XColor *color)
{
XImage *image;
image = XGetImage(d, RootWindow(d, DefaultScreen(d)), x, y, 1, 1, AllPlanes, XYPixmap);
color->pixel = XGetPixel(image, 0, 0);
XFree(image);
XQueryColor(d, DefaultColormap(d, DefaultScreen(d)), color);
}
int main(int argc, char const *argv[])
{
Display *disp = XOpenDisplay(":0");
XColor pixel_color;
get_pixel_color(disp, 0, 0, &pixel_color);
printf("%d %d %d\n", pixel_color.red, pixel_color.green, pixel_color.blue);
return 0;
}
Вопрос:
Понятия не имею, почему номера выходов не находятся в стандартном диапазоне RGB: 0-255?
Пример текущего вывода (взят из картинки на рабочем столе, [0,0]):
7683 8484 4097
Ожидаемый результат (взят с помощью средства выбора цвета Windows, запущенного Wine):
29 32 16
Я понял, что мне нужно преобразовать значения в стандартный диапазон. Не могли бы вы посоветовать тогда формулу?