我可以使用XGetPixel()
从XImage
获取像素。我如何使用Pixmap
来获取像素?
答案 0 :(得分:1)
如果至少有一个函数可以从服务器的可绘制中提取像素,那就太好了。可悲的是,没有一个。但是,以下内容可能会有所帮助。
由于Pixmap
是Drawable
,您可以XGetImage()
传递Pixmap
,XImage
将返回指向XImage
的指针。现在您已拥有XGetPixel()
,可以使用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()
一起传递给XGetPixel()
。您可以通过将宽度和高度都设置为1来抓取单个像素,然后在XImage
上使用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
指定的相同{{1}}结构的指针。
答案 1 :(得分:1)
从性能的角度来看,一般来说这是一个坏主意:永远不要从屏幕上读取,只能推送它。如果需要获取像素状态,请维护屏幕的本地缓冲区。如果你无法修改你正在使用的程序,那么+1给Jonny Henly的答案:先做一个GetImage请求,先下载一个包含你像素的区域,然后在本地阅读。如果你想在一个循环中访问多个像素,最好在一个请求中抓取它们