Я хочу получить значение RGB верхнего/левого пикселя (0; 0) всего дисплея x11.Как получить цвет пикселя экрана в x11
что я получил до сих пор:
XColor c;
Display *d = XOpenDisplay((char *) NULL);
XImage *image;
image = XGetImage (d, RootWindow (d, DefaultScreen (d)), x, y, 1, 1, AllPlanes, XYPixmap);
c->pixel = XGetPixel (image, 0, 0);
XFree (image);
XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), c);
cout << c.red << " " << c.green << " " << c.blue << "\n";
, но мне нужно эти значения, чтобы быть 0..255
или (0.00)..(1.00)
, в то время как они выглядят как 0..57825
, который не является форматом я признаю.
также, копирование всего экрана, чтобы получить один пиксель, очень медленно. так как это будет использоваться в критически важных средах, я был бы признателен, если кто-то знает более эффективный способ сделать это. Возможно, используя XGetSubImage
размера 1x1, но я очень плохо разбираюсь в разработке x11 и не знаю, как это реализовать.
Что мне делать?
Разделить на 57825? –
уверен, вот что я делаю прямо сейчас, но это дает мне крипы, потому что: а) я не знаю, почему это работает, б) я не знаю, насколько это надежно и в) Это все еще медленно (время говорит «cpu 0,054 total» для одного пикселя!). – nonchip
Собственно, согласно [this] (http: // http: //tronche.com/gui/x/xlib/color/structures.html), это должны быть просто неинициализированные значения нежелательной почты. Используйте некоторые базовые бит-мудрые операторы в длинном, возвращаемом XGetPixel, и вы должны быть установлены. –