Получить цвет пикселя в C ++, Linux - PullRequest
3 голосов
/ 29 марта 2010

Я ищу возможность получить цвет пикселя с заданными координатами экрана (x, y) в c ++ / Linux? Может быть, что-то похожее на getPixel () в Windows. Я потратил целый день, чтобы найти что-то, но безуспешно.

Спасибо, Стефан

Ответы [ 3 ]

3 голосов
/ 29 марта 2010

Предполагая, что вы имеете в виду использование 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);

РЕДАКТИРОВАТЬ: пример кода C ++ с использованием Gdkmm (обратите внимание, что это просто пример, предполагающий цветовое пространство RGB, вы должны проверить цветовое пространство рисованного объекта, прежде чем придать значение необработанным байтам).

#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;
}
0 голосов
/ 24 октября 2011

Я столкнулся с той же проблемой и обнаружил, что решение зависит от ситуации. Отличный способ сделать это - сделать снимок окна, на которое вы смотрите. Затем найдите функцию поиска нужного вам пикселя. Имейте в виду, что координаты x, y начнутся с левого верхнего угла окна, как указано в левом верхнем углу экрана. Что касается того, как это сделать, я предлагаю вам взглянуть на SCAR Divi, свидетелем которого являются Freddy1990 http://freddy1990.com/ и Симба http://villavu.com/.

Эти программы используются для программирования автоматизированных задач на компьютере и использования поиска цвета пикселей для выполнения некоторых задач. Симба с открытым исходным кодом и все еще находится на ранней стадии развития. Он использует паскаль. Тем не менее, вы можете использовать библиотеку, которую она использует, как расширение C и пожертвовать небольшой скоростью.

0 голосов
/ 29 марта 2010

См. Различные различные методы, размещенные на http://ubuntuforums.org/showthread.php?t=715256

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...