Ответ 1
Вы должны взглянуть на [исходный код Boblight] [1].
Расширение Boblight кажется жизнеспособной альтернативой (если оно не поддерживает то, что вам уже нужно!).
Если нет, посмотрите на папку src/clients/
. boblight-getpixel.c
(для MS Windows) и boblight-X11.c
являются " boblight-X11.c
пикселей"; автономные программы, которые делают именно то, что вам нужно, а затем передают захваченный цвет на сервер boblight.
В boblight-X11.c
вас есть примеры использования XShmGetImage
или более медленного XGetImage
для чтения частей экрана с помощью X11/extensions/XShm.h
, часть этого кода делает:
[...]
if(!XShmGetImage(dpy, root_win, xim, 0, 0, AllPlanes))
{
sleep(1);
pthread_mutex_unlock(&grabmutex);
return;
}
XSync(dpy, True);
for (x = 0; x < width; x += xadd)
{
for (y = 0; y < height; y += yadd)
{
pixel = XGetPixel(xim, x, y);
RGB[0] = (pixel >> 16) & 0xff;
RGB[1] = (pixel >> 8) & 0xff;
RGB[2] = (pixel >> 0) & 0xff;
/*add it to the RGB array*/
boblight_add_pixel (&config, RGB, x, y);
}
}
[...]
[1]: https://code.google.com/archive/p/boblight/source/default/source