簡體   English   中英

在C ++中的聚焦窗口上使用XGetPixel獲取像素RGB顏色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM