0

我可以用来XGetPixel()XImage. 我用什么从 a 中获取像素Pixmap

4

2 回答 2

2

如果至少有一个函数可以从服务器的可绘制对象中提取像素,那就太好了。可悲的是,没有一个。但是,以下内容可能会有一些用处。

因为Pixmapis aDrawable你可以传递which 将返回一个指向 a 的XGetImage()指针。现在您有了一个可以使用的.PixmapXImageXImageXGetPixel()

XGetImage 参数:

XImage *XGetImage(display, d, x, y, width, height, plane_mask, format)
        Display *display;
        Drawable d;
        int x, y;
        unsigned int width, height;
        unsigned long plane_mask;
        int format;

更好的是,您可以预先创建一个XImage并将其与Pixmapto一起传递XGetSubImage()。您可以通过将宽度和高度都设置为 1 来获取单个像素,然后XGetPixel()XImage.

XGetSubImage 参数:

XImage *XGetSubImage(display, d, x, y, width, height, plane_mask, format, dest_image, dest_x, 
                     dest_y)
      Display *display;
      Drawable d;
      int x, y;
      unsigned int width, height;
      unsigned long plane_mask;
      int format;
      XImage *dest_image;
      int dest_x, dest_y;

注意XGetSubImage()返回指向由 .XImage指定的相同结构的指针dest_image

于 2015-01-16T05:25:38.720 回答
2

一般来说,从性能的角度来看,这是一个坏主意:从不从屏幕读取,只推送到它。如果您需要获取像素状态,请维护屏幕的本地缓冲区。如果您无法修改您正在使用的程序,那么对 Jonny Henly 的回答 +1:首先执行 GetImage 请求,首先下载包含您的像素的区域,然后在本地读取。如果您想在一个循环中访问多个像素,最好在一个请求中全部获取它们

于 2015-01-16T23:54:07.330 回答