전체 x11 디스플레이의 위쪽/왼쪽 픽셀 (0; 0)의 RGB 값을 가져 오려고합니다. 내가 지금까지 알아 낸x11에서 화면 픽셀의 색을 얻는 방법
는 : 그들은 내가 인식 어떤 형식입니다 0..57825
, 같이 동안
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)
해야합니다.
또한 하나의 픽셀을 얻으려고 전체 화면을 복사하는 것은 매우 느립니다. 이것은 속도가 중요한 환경에서 사용될 것이기 때문에 누군가가 이것을 수행하는 더 좋은 방법을 알고 있다면 고맙겠습니다. 어쩌면 1x1 크기의 XGetSubImage
을 사용하지만, x11 개발에서 나쁘고 구현 방법을 모르겠습니다.
어떻게해야합니까? XColor(3) 사람 페이지에서
57825로 나누기? –
그게 바로 지금하고있는 일입니다. 그러나 그것은 왜 저주합니다. 왜냐하면 왜 그것이 효과가 있는지, b) 나는 그것이 얼마나 신뢰할 수 있는지, 그리고 c) 여전히 느리다는 것을 알지 못하기 때문입니다. 단일 픽셀의 경우 "cpu 0,054 total'"). – nonchip
사실 [This] (http : //tronche.com/gui/x/xlib/color/structures.html)에 따르면, 초기화되지 않은 정크 값이어야합니다. XGetPixel에서 반환 한 long에 대해 몇 가지 기본 비트 연산자를 사용하면 설정해야합니다. –