如何获得屏幕的像素颜色? (覆盆子pi)

时间:2013-10-22 00:57:59

标签: python c raspberry-pi

是否可以在Rasbmc(Raspberry Pi)中用C检索屏幕上像素的颜色? 我的计划是使用它与WiringPi一起根据屏幕上某些点的平均颜色来控制RGB LED。

我研究了各种选项,包括使用Python。一个站点提供了看似有用的示例,但我还没有让它们工作。我已经尝试过Python和C Examples

我使用的代码如下:

#include <X11/Xlib.h>

void get_pixel_color (Display *d, int x, int y, XColor *color)
{
    XImage *image;
    image = XGetImage (d, RootWindow (d, DefaultScreen (d)), x, y, 1, 1, AllPlanes, XYPixmap);
    color->pixel = XGetPixel (image, 0, 0);
    XFree (image);
    XQueryColor (d, DefaultColormap(d, DefaultScreen (d)), color);
}


XColor c;
get_pixel_color(display, 30, 40, &c);
printf ("%d %d %d\n", c.red, c.green, c.blue);

然而我似乎无法让它发挥作用。这些是我使用C示例时遇到的错误:

Error Message

我不明白的是我得到的第一个错误(其他错误似乎与printf函数的格式化有关,所以我猜它们可以被忽略?)。数字常量是什么意思,是指get_pixel_color函数的x和y分量?这对我来说似乎很奇怪,但我知道我必须在这里误解一些东西!

2 个答案:

答案 0 :(得分:1)

您对get_pixelcolor的调用不在函数中。

你似乎完全没有主要功能,除非我完全遗漏了一些东西。您正在调用程序块的OUTSIDE函数。在C中,格式化保留用于原型设计。你的编译器期待一个原型(Prototyping粗略地描述一个函数,“在你真正描述它的实现之前,先接受这些参数,返回这个”。如果你不熟悉这个术语。),当你喂它时功能

至少你在看:

int main(){
    XColor c;
    get_pixel_color(display, 30, 40, &c);
    printf ("%d %d %d\n", c.red, c.green, c.blue);
    return 0;
}

尝试一下,看看它是否有效。

如果这是一个已经有一个main的大型程序的一部分,只需调用该函数不同的东西并从main调用它。

答案 1 :(得分:1)

这是您的实际.c文件,还是只是一个片段?如果它是您的实际文件(根据行号判断,那么),那么您需要将最后三行放在main() function中:

int main (int argc, char **argv) {
    XColor c;
    get_pixel_color(display, 30, 40, &c);
    printf ("%d %d %d\n", c.red, c.green, c.blue);
    return 0;
}