【问题标题】:Get pixel RGB color with XGetPixel on focused window in C++在 C++ 中的焦点窗口上使用 XGetPixel 获取像素 RGB 颜色
【发布时间】:2016-05-18 19:25:27
【问题描述】:

当我点击我的窗口时,我会从另一个函数中获得正确的 x y 值。使用这些值,我不想在当前活动的窗口而不是整个屏幕上获得 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" ;

}

【问题讨论】:

    标签: c++ colors x11 xlib fltk


    【解决方案1】:

    我找到了一种使用 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 );
    
    }
    
        }
    

    【讨论】:

      【解决方案2】:

      使用用于渲染地图的窗口句柄代替 RootWindow();因为您已经获得了正确的 x/y 坐标,所以您必须在某处使用该句柄。

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多