在C ++,Linux中获取像素的颜色

时间:2010-03-29 18:15:10

标签: c++ linux

我正在寻找在c ++ / Linux中获得给定屏幕坐标(x,y)的像素颜色的可能性?也许类似于Windows中的getPixel()。我花了一整天时间才找到......但没有成功。

谢谢,Stefan

3 个答案:

答案 0 :(得分:3)

假设您的意思是使用C和GTK,答案可以使用:

gdk_get_default_root_window()

GdkPixbuf*  gdk_pixbuf_get_from_drawable    (GdkPixbuf *dest,
                                             GdkDrawable *src,
                                             GdkColormap *cmap,
                                             int src_x,
                                             int src_y,
                                             int dest_x,
                                             int dest_y,
                                             int width,
                                             int height);

编辑:使用Gdkmm示例c ++代码(请注意,这只是一个假设RGB颜色空间的示例,您应该在给出原始字节的含义之前检查drawable的颜色空间。)

#include <iostream>
#include <gtkmm.h>
#include <gdkmm.h>

int main(int argc, char* argv[])
{
  Gtk::Main kit(argc, argv);
  if(argc != 3) { std::cerr << argv[0] << " x y" << std::endl; return 1;}
  int x = atoi(argv[1]);
  int y = atoi(argv[2]);
  Glib::RefPtr<Gdk::Screen> screen = Gdk::Screen::get_default();
  Glib::RefPtr<Gdk::Drawable> win = screen->get_root_window();
  Glib::RefPtr<Gdk::Pixbuf> pb = Gdk::Pixbuf::create(win, x, y, 1, 1);
  unsigned char* rgb = pb->get_pixels();
  std::cerr << (int)rgb[0] << ", " << (int)rgb[1] << ", " << (int)rgb[2] << std::endl;
  return 0;
}

答案 1 :(得分:0)

查看http://ubuntuforums.org/showthread.php?t=715256

发布的各种不同技巧

答案 2 :(得分:0)

我遇到过同样的问题,并且发现解决方案取决于手头的情况。一个很好的方法是捕获您正在查看的窗口的位图。然后在函数中搜索您正在寻找的像素。请记住,x,y坐标将从窗口左上角开始,与屏幕的左上角相对应。至于如何做到这一点,我建议你看看Freddy1990 http://freddy1990.com/和Simba http://villavu.com/所带来的SCAR Divi。

这些程序用于在计算机上编写自动化任务,并使用像素颜色查找来完成某些任务。 Simba是开源的,仍处于婴儿阶段。它使用pascal。但是你可以使用它作为C语言扩展使用的库并牺牲一点速度。