我可以用来XGetPixel()
从XImage
. 我用什么从 a 中获取像素Pixmap
?
问问题
1889 次
2 回答
2
如果至少有一个函数可以从服务器的可绘制对象中提取像素,那就太好了。可悲的是,没有一个。但是,以下内容可能会有一些用处。
因为Pixmap
is aDrawable
你可以传递which 将返回一个指向 a 的XGetImage()
指针。现在您有了一个可以使用的.Pixmap
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
to一起传递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 回答