我想要獲取整個x11顯示器的頂部/左側像素(0; 0)的RGB值。如何在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
,這是沒有任何格式我承認。
此外,複製整個屏幕只是爲了獲得一個像素是非常緩慢的。因爲這將用於速度至關重要的環境中,如果有人知道更高效的方式來執行此操作,我將不勝感激。也許使用尺寸爲1x1的XGetSubImage
,但是我在x11開發中非常糟糕,並且不知道如何實現它。
我該怎麼辦?
除以57825? –
當然,這就是我現在正在做的事情,但它讓我感到毛骨悚然,因爲a)我不知道它爲什麼起作用,b)我不知道它有多可靠,c)它仍然很慢(時間說「'cpu 0,054 total'」爲單個像素!)。 – nonchip
實際上,根據[this](http://http://tronche.com/gui/x/xlib/color/structures.html),它應該只是未初始化的垃圾值。在XGetPixel返回的長整型上使用一些基本的位運算符,並且應該設置。 –