Hat_if_nat
|
молчу,смотрю в даль
|
|
|
|
Рег.: 23.01.2005
|
Сообщений: 448
|
Из: сказка Туве Янссон
|
Рейтинг: 160
|
|
Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
26.11.2009 14:01
|
|
|
Задача такова (только не бейте за дилетанство ): Хочу написать прогу желательно на C / C++, которая выдавала бы значение заданного пикселя экрана (рабочего стола). На входе координаты пикселя, на выходе например (255, 0, 0 ) если красный. Ося *nix : или Mandriva, или Ubuntu, X-ы, KDE, видеокарта какая-то (если это важно).
Похоже что надо сделать запрос в опреденную область видеопамяти, сидящей в оперативной памяти. Но как , при помощи каких методов каких библиотек (может быть, в OpenGL что-нибудь есть???), возможен ли доступ к таким данным в принципе, можно ли обойтись без ассемблера - не знаю.
пиксель не физический а, тот, что в графической оболочки. Буду рад, если кто-нить понял мою задачу и попробует мне объяснить КУДА собственно копать.
|
|
|
porcupine
|
Carpal Tunnel
|
|
|
|
Рег.: 09.09.2008
|
Сообщений: 6598
|
|
Рейтинг: 7627
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Hat_if_nat]
26.11.2009 14:20
|
|
|
OpenGL тебе не поможет. Все делается намного проще. Как в линуксе - не знаю.
|
And then my master flew to the moon in a rocket of flamin' cheese! I like cheese! |
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Hat_if_nat]
26.11.2009 14:25
|
|
|
|
Hoochy
|
Безжалостный пездюк
|
|
|
|
Рег.: 06.07.2005
|
Сообщений: 1073
|
|
Рейтинг: 1996
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Hat_if_nat]
26.11.2009 14:32
|
|
|
OpenGL тут явно не нужен. Можно такое сделать при помощи Qt. Есть пример для сохранения скриншота. В нем надо будет сделать что-то вроде:
code:
QImage image = originalPixmap.toImage();
QRgb colour = image.pixel( x, y);
|
|
Hat_if_nat
|
молчу,смотрю в даль
|
|
|
|
Рег.: 23.01.2005
|
Сообщений: 448
|
Из: сказка Туве Янссон
|
Рейтинг: 160
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Emacs]
27.11.2009 13:17
|
|
|
Спасибо за ссылку по X-ам! Можно вопрос? взял пример кода "Hello World X" отсюда: http://www.paulgriffiths.net/program/c/hellox.php все необходимые либы установлены. пытаюсь скомпилить: code: g++ Hello.c -L/usr/include/X11
выдает вот что: code: /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 `XDrawString'
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 файл? или можно обойтись без него
|
|
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Hat_if_nat]
27.11.2009 13:40
|
|
|
|
Hat_if_nat
|
молчу,смотрю в даль
|
|
|
|
Рег.: 23.01.2005
|
Сообщений: 448
|
Из: сказка Туве Янссон
|
Рейтинг: 160
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: LazyBehemoth]
27.11.2009 15:51
|
|
|
Да, заработал HelloWorld. Спасибо. Осталось понять, что помимо подключения к X-серверу и вызова XGetPixel необходимо добавить в проге о цвете пикселя.
|
|
|
Hoochy
|
Безжалостный пездюк
|
|
|
|
Рег.: 06.07.2005
|
Сообщений: 1073
|
|
Рейтинг: 1996
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Hat_if_nat]
27.11.2009 17:12
|
|
|
Предлагаю готовое решение. Раньше на Qt ничего не писал, поэтому возможны косяки. code:
#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;
}
|
|
Emacs
|
Carpal Tunnel
|
|
|
|
Рег.: 19.06.2008
|
Сообщений: 4873
|
|
Рейтинг: 1683
|
|
Re: Узнать цвет пикселя. Работа с видеопамятью. С/С++ [ + OpenGL ? ].
[re: Hat_if_nat]
27.11.2009 18:12
|
|
|
|