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