Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qwerky от Сентябрь 28, 2009, 18:54



Название: инструмент "пипетка" для выбора цвета
Отправлено: qwerky от Сентябрь 28, 2009, 18:54
подскажите пожалуйста как лучше реализовать сей инструмент.
спасибо.


Название: Re: инструмент "пипетка" для выбора цвета
Отправлено: lit-uriy от Сентябрь 28, 2009, 19:24
может подойдёт готовый?
QwwHueSatPicker или QwwHueSatRadialPicker (http://www.wysota.eu.org/wwwidgets/)
Color Triangle (http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolortriangle/)


Название: Re: инструмент "пипетка" для выбора цвета
Отправлено: qwerky от Сентябрь 28, 2009, 21:11
нет, для выбора подходит и стандартный qcolordialog, нужен выбор цвета из конкретной области экрана.


Название: Re: инструмент "пипетка" для выбора цвета
Отправлено: lit-uriy от Сентябрь 28, 2009, 22:02
>>нужен выбор цвета из конкретной области экрана
Наверное из произвольной.
посмотри инструмент pixeltool, входит в комплект Qt, его бинарь лежит в каталоге %QTDIR%/bin
он позволяет смотреть пиксели в любом месте экрана, ну а как их цвет получить, я думаю сам разберёшся


Название: Re: инструмент "пипетка" для выбора цвета
Отправлено: IGHOR от Октябрь 07, 2009, 21:54
Писал такую приблуду, оказывается в примере pixeltool если доставать цвет пикселя при каждом mouseMoveEvent() через grabWindow() то получается очень тормознутый алгоритм.
Предлагаю при нажатие на пипетку сохранять картинку:
QIcon iconCache=QPixmap::grabWindow(QApplication::desktop()->winId(),0,0,QApplication::desktop()->width(),QApplication::desktop()->height()).toImage();
При mouseMoveEvent() доставать на лету пиксель по адресу из забуферированной картинки
QColor(iconCache.pixel(QCursor::pos()))
По mouseReleaseEvent() разумееться убить картинку с кеша, занулить
Получаеться очень скоросная реализация пипетки!

Примечание: можно использовать для захвата картинки с рабочего стола такое:
QIcon iconCache=QPixmap::grabWindow(QApplication::desktop()->winId());
Но не указав ширину и высоту через параметры получаем в результат захваченную картинку только с одного (примари) монитора, разумеется если их больше одного, а в предыдущем варианте получаем все мониторы в одной картинке, что и нужно для полноценной пипетки.


Название: Re: инструмент "пипетка" для выбора цвета
Отправлено: SASA от Октябрь 09, 2009, 16:32
Я граблю по одному  пикселю. Тормозов не замечал.
Код:
QPoint pos = m_view->mapFromGlobal(QCursor::pos());
QImage im = QPixmap::grabWidget(qApp->desktop()->winId(),pos.x(),pos.y(),1,1).toImage();
if (im.isNull()) return 0;
QRgb color = im.pixel(0,0);