0

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

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

我正在使用的代码如下:

#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 示例时遇到的错误:

错误信息

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

4

2 回答 2

1

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

除非我完全遗漏了某些东西,否则您似乎完全缺少主要功能。您正在调用程序块之外的函数。在 C 中,该格式保留用于原型设计。你的编译器需要一个原型(原型是在你实际描述它的实现之前粗略地描述一个函数,“接受这些参数,返回这个”。如果你不熟悉术语。),当你给它一个功能。

至少你在看:

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

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

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

于 2013-10-22T01:21:29.880 回答
1

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

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;
}
于 2013-10-22T01:22:37.323 回答