2016-02-08 73 views
1

當我點擊我的窗口時,我從另一個函數中得到正確的xy值。使用這些值,我不想在當前活動的窗口獲取RGB顏色值,而不是整個屏幕。現在我認爲它正在讀取整個屏幕。我如何編輯此代碼以使其工作? (該窗口本身是使用FLTK庫的Fl_Double_Window)。在C++中用聚焦窗口獲取像素RGB顏色

圖片說明問題:clicking on territory color

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" ; 

} 

回答

0

我發現使用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); 

} 

    } 
0

使用,用於呈現地圖中RootWindow代替窗口句柄();既然你已經得到了正確的x/y座標,你必須在某個地方使用該句柄。