如何从Pixmap获取像素颜色

时间:2015-01-16 03:57:24

标签: x11 pixmap

我可以使用XGetPixel()XImage获取像素。我如何使用Pixmap来获取像素?

2 个答案:

答案 0 :(得分:1)

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

由于PixmapDrawable,您可以XGetImage()传递PixmapXImage将返回指向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;

XGetImage参数:

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参数:

XGetSubImage()

注意XImage返回指向由dest_image指定的相同{{1}}结构的指针。

答案 1 :(得分:1)

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