Russian Qt Forum
Ноябрь 25, 2024, 08:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: инструмент "пипетка" для выбора цвета  (Прочитано 7824 раз)
qwerky
Гость
« : Сентябрь 28, 2009, 18:54 »

подскажите пожалуйста как лучше реализовать сей инструмент.
спасибо.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Сентябрь 28, 2009, 19:24 »

может подойдёт готовый?
QwwHueSatPicker или QwwHueSatRadialPicker
Color Triangle
Записан

Юра.
qwerky
Гость
« Ответ #2 : Сентябрь 28, 2009, 21:11 »

нет, для выбора подходит и стандартный qcolordialog, нужен выбор цвета из конкретной области экрана.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Сентябрь 28, 2009, 22:02 »

>>нужен выбор цвета из конкретной области экрана
Наверное из произвольной.
посмотри инструмент pixeltool, входит в комплект Qt, его бинарь лежит в каталоге %QTDIR%/bin
он позволяет смотреть пиксели в любом месте экрана, ну а как их цвет получить, я думаю сам разберёшся
Записан

Юра.
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #4 : Октябрь 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());
Но не указав ширину и высоту через параметры получаем в результат захваченную картинку только с одного (примари) монитора, разумеется если их больше одного, а в предыдущем варианте получаем все мониторы в одной картинке, что и нужно для полноценной пипетки.
« Последнее редактирование: Октябрь 07, 2009, 21:56 от IGHOR » Записан
SASA
Гость
« Ответ #5 : Октябрь 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);
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.