如何从像素图中获取像素颜色
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 请求,先下载一个包含你的像素的区域,然后在本地读取。如果你想在循环中访问多个像素,最好在一个请求中获取所有像素
我可以使用 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 请求,先下载一个包含你的像素的区域,然后在本地读取。如果你想在循环中访问多个像素,最好在一个请求中获取所有像素