[英]Get pixel RGB color with XGetPixel on focused window in C++
當我單擊我的窗口時,我從另一個函數獲得正確的xy值。 使用這些值,我將無法在當前處於活動狀態的窗口而不是整個屏幕上獲得RGB顏色值。 現在,我認為它正在讀取整個屏幕。 如何編輯此代碼以使其正常工作? (窗口本身是使用FLTK庫的Fl_Double_Window)。
int getRGB(int x, int y)
{
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, x, y);
XFree (image);
XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), &c);
cout << c.red/256 << " " << c.green/256 << " " << c.blue/256 << "\n" ;
}
使用用於渲染地圖的Window句柄代替RootWindow(); 由於您已經獲得了正確的x / y坐標,因此必須在某處使用該句柄。
我找到了使用Fl_BMP_image(gInterface.carte)的方法:
void GetPixelColor(int x, int y,char *r,char *g, char *b) //get RGB color from clicked pixel x,y and returns rgb
{
const char* buf = gInterface.carte->data()[0];
long index = (y * gInterface.carte->w() * gInterface.carte->d()) + (x * gInterface.carte->d()); // X/Y -> buf index
if (gInterface.carte->count()==1) { // RGB
*r = *(buf+index+0);
*g = *(buf+index+1);
*b = *(buf+index+2);
printf("%d, %d : %2d, %d, %d \n", x,y, // hex dump r/g/b
(unsigned char) *r,
(unsigned char) *g ,
(unsigned char) *b );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.