如何从像素图中获取像素颜色

How to get pixel color from a Pixmap

我可以使用 XGetPixel()XImage 中获取一个像素。我用什么从 Pixmap 中获取像素?

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

由于 Pixmap 是一个 Drawable,您可以将 XGetImage() 传递给 Pixmap,这将 return 指向 XImage 的指针。现在您有了 XImage,您可以使用 XGetPixel().

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 并将其与 Pixmap 一起传递给 XGetSubImage()。您可以通过将宽度和高度都设置为 1 来获取单个像素,然后在 XImage.

上使用 XGetPixel()

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() return是指向由dest_image指定的相同XImage结构的指针。

从性能的角度来看,通常这是一个坏主意:永远不要从屏幕上读取,只能推送到屏幕上。如果需要获取像素状态,请维护屏幕的本地缓冲区。如果你不能修改你正在使用的程序,那么 +1 到 Jonny Henly 的回答:先做一个 GetImage 请求,先下载一个包含你的像素的区域,然后在本地读取。如果你想在循环中访问多个像素,最好在一个请求中获取所有像素