Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
OpenGL тебе не поможет. Все делается намного проще. Как в линуксе - не знаю.
Можно такое сделать при помощи Qt.
Есть пример для сохранения скриншота.
В нем надо будет сделать что-то вроде:
QImage image = originalPixmap.toImage;
QRgb colour = image.pixel( x, y);
Можно вопрос?
взял пример кода "Hello World X" отсюда:
http://www.paulgriffiths.net/program/c/hellox.php
все необходимые либы установлены.
пытаюсь скомпилить:
g++ Hello.c -L/usr/include/X11
выдает вот что:
/home/user9/tmp/ccc80kao.o: In function `main':
Hello.c:(.text+0x43): undefined reference to `XAllocSizeHints'
Hello.c:(.text+0x53): undefined reference to `XAllocWMHints'
Hello.c:(.text+0x63): undefined reference to `XAllocClassHint'
Hello.c:(.text+0xb4): undefined reference to `XOpenDisplay'
Hello.c:(.text+0x232): undefined reference to `XCreateSimpleWindow'
Hello.c:(.text+0x24e): undefined reference to `XStringListToTextProperty'
Hello.c:(.text+0x299): undefined reference to `XStringListToTextProperty'
Hello.c:(.text+0x37a): undefined reference to `XSetWMProperties'
Hello.c:(.text+0x395): undefined reference to `XSelectInput'
Hello.c:(.text+0x3a9): undefined reference to `XLoadQueryFont'
Hello.c:(.text+0x408): undefined reference to `XCreateGC'
Hello.c:(.text+0x42a): undefined reference to `XSetFont'
Hello.c:(.text+0x462): undefined reference to `XSetForeground'
Hello.c:(.text+0x478): undefined reference to `XMapWindow'
Hello.c:(.text+0x491): undefined reference to `XNextEvent'
Hello.c:(.text+0x4f6): undefined reference to `XTextWidth'
Hello.c:(.text+0x582): undefined reference to `rawString'
Hello.c:(.text+0x5b2): undefined reference to `XUnloadFont'
Hello.c:(.text+0x5c8): undefined reference to `XFreeGC'
Hello.c:(.text+0x5d7): undefined reference to `XCloseDisplay'
collect2: выполнение ld завершилось с кодом возврата 1
Похоже, что либы "не подгрузились"
Что я сделал не так при компиляции? Может нужно писать make файл? или можно обойтись без него
Спасибо.
Осталось понять, что помимо подключения к X-серверу и вызова XGetPixel необходимо добавить в проге о цвете пикселя.
Раньше на Qt ничего не писал, поэтому возможны косяки.
#include <QApplication>
#include <QPixmap>
#include <QDesktopWidget>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop->winId;
QImage image = pixmap.toImage;
int x, y;
cout << "x = ";
cin >> x;
cout << "y = ";
cin >> y;
QColor color( image.pixel( x, y;
cout << "(" << color.red << ", "
<< color.green << ", "
<< color.blue << " )" << endl;
return 0;
}
http://tronche.com/gui/x/xlib/graphics/images.html#XImage
ссылка была в пределах страницы
ссылка была в пределах страницы
Оставить комментарий
Xomiak09
Задача такова (только не бейте за дилетанство ):Хочу написать прогу желательно на C / C++, которая выдавала бы значение заданного пикселя экрана (рабочего стола).
На входе координаты пикселя, на выходе например (255, 0, 0 ) если красный.
Ося *nix : или Mandriva, или Ubuntu, X-ы, KDE, видеокарта какая-то (если это важно).
Похоже что надо сделать запрос в опреденную область видеопамяти, сидящей в оперативной памяти. Но как , при помощи каких методов каких библиотек (может быть, в OpenGL что-нибудь есть? возможен ли доступ к таким данным в принципе, можно ли обойтись без ассемблера - не знаю.
пиксель не физический а, тот, что в графической оболочки.
Буду рад, если кто-нить понял мою задачу и попробует мне объяснить КУДА собственно копать.