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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Градиент [решено]  (Прочитано 15375 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Январь 27, 2012, 14:46 »

Добрый день

Умеет ли Qt (или кто-нибудь другой) делать такой градиент (аттач)? Цвета в углах/вершинах заданы. Если да, то какой класс задействовать?

Спасибо
« Последнее редактирование: Февраль 04, 2012, 12:22 от Igors » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Январь 27, 2012, 15:07 »

А как же. Смеющийся
Код
C++ (Qt)
#include <QtGui/QApplication>
#include <QtGui/QLabel>
 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
 
QLabel label;
label.setWindowTitle ("For Igors");
 
QPixmap pixmap;
pixmap.load ("/var/tmp/grad.png", "PNG");
label.setPixmap (pixmap);
label.show ();
label.setScaledContents (true);
 
return a.exec();
}
 
« Последнее редактирование: Январь 27, 2012, 15:11 от Пантер » Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Январь 27, 2012, 16:13 »

Ну вставить картинку градиент не нужен Улыбающийся
А как для произвольных (заданных) цветов/вершин? Ответ "такого нет" тоже будет информативен, значит позаимствовать из исходников не удастся и придется долбать теорию. А что скажет GreatSnake?
Записан
alexman
Гость
« Ответ #3 : Январь 27, 2012, 17:42 »

Можно kriging заюзать.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #4 : Январь 27, 2012, 17:50 »

Умеет ли Qt (или кто-нибудь другой) делать такой градиент (аттач)? Цвета в углах/вершинах заданы. Если да, то какой класс задействовать?
GDI+ умеет, называется PathGradientBrush.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Январь 27, 2012, 18:12 »

GDI+ умеет, называется PathGradientBrush.
Спасибо, не знал об этой возможности GDI. Но она не то делает, заданного центра у меня нет, наоборот в какой-то центральной  точке должна быть смесь всех цветов.

Можно kriging заюзать.
Вот kriging "не асилил". Читал что это, мол, самая крутизна, пытался неск раз прорваться но безуспешно. Может мешает привычка все время прикидывать "а как быстро это будет работать", а в kriging расчетов немеряно. А Вы его делали? Если да, расскажите. Спасибо  
« Последнее редактирование: Январь 27, 2012, 18:15 от Igors » Записан
ufna
Гость
« Ответ #6 : Январь 27, 2012, 18:55 »

мне кажется тут достаточно радиальные градиенты от 100 до нуля по альфе микшировать и будет то, что на картинке
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Январь 27, 2012, 19:24 »

мне кажется тут достаточно радиальные градиенты от 100 до нуля по альфе микшировать и будет то, что на картинке
Думал в этом направлении, но ничего не придумалось. "Радиально" предполагает что есть "центр" который становится неприятно видимым/заметным, как его ни вычисляй.

А ведь для 3 углов все так известно и хорошо  Улыбающийся 
Записан
ufna
Гость
« Ответ #8 : Январь 27, 2012, 19:53 »

Думал в этом направлении, но ничего не придумалось. "Радиально" предполагает что есть "центр" который становится неприятно видимым/заметным, как его ни вычисляй.

А ведь для 3 углов все так известно и хорошо  Улыбающийся 

центр - это вершины многоугольника. От них и считать.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Январь 27, 2012, 19:59 »

центр - это вершины многоугольника. От них и считать.
Хмм.. несколько странное определение центра Улыбающийся Ну ладно, тогда расскажите как считать, а то Ваша мысль непонятна
Записан
alexman
Гость
« Ответ #10 : Январь 27, 2012, 22:41 »

Цитировать
Можно kriging заюзать.
Вот kriging "не асилил". Читал что это, мол, самая крутизна, пытался неск раз прорваться но безуспешно. Может мешает привычка все время прикидывать "а как быстро это будет работать", а в kriging расчетов немеряно. А Вы его делали? Если да, расскажите. Спасибо  
Kriging работает достаточно медленно. То есть если надо что интерактивное (типа потянул и сразу все пересчиталось), то это вряд ли. Хотя если точек, участвующих в расчете значения для текущей немного, то может и прокатит. Сам использовал kriging, но для неинтерактивных целей.
Записан
alexman
Гость
« Ответ #11 : Январь 27, 2012, 22:53 »

Трудно сказать годится ли данный вариант для этого случая (так как давно уже с подобным "не ковырялся" и не помню всех нюансов алгоритмов), но можно попробовать:
1. Построить триангуляцию по набору точек.
2. Для любой точки находим треугольник и рассчитываем значение по известному алгоритму. То есть значение будет учитывать только 3 точки и это, наверное, не то?

ЗЫ kriging 100% подойдет, но хз по скорости.
Записан
ufna
Гость
« Ответ #12 : Январь 27, 2012, 22:58 »

Хмм.. несколько странное определение центра Улыбающийся Ну ладно, тогда расскажите как считать, а то Ваша мысль непонятна

как в файле, только радиус у всех - как у зеленого (предполагаю, что "до дальней вершины" должен быть)

рисуем градиенты каждого цвета от 255 до 0 по альфе от центра до дальней точки. микшируем их.
Записан
twp
Гость
« Ответ #13 : Январь 27, 2012, 23:03 »

это довольно легко реализуется на OpenGL.
Код
C
glShadeModel(GL_SMOOTH);
glBegin(GL_LINE_STRIP);
  glColor(....);
  glVertex(...);
  ....
glEnd();
 
тут есть пример с пирамидой
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Январь 28, 2012, 11:43 »

ЗЫ kriging 100% подойдет, но хз по скорости.
Давайте я создам новую тему и там Вы расскажете как "крайгить"? (чтобы не мешать все в кучу)

1. Построить триангуляцию по набору точек.
2. Для любой точки находим треугольник и рассчитываем значение по известному алгоритму. То есть значение будет учитывать только 3 точки и это, наверное, не то?
Не то, треугольники получаются поганенькие - со слишком острыми углами, ну сразу попрут "ребра" между ними.

как в файле, только радиус у всех - как у зеленого (предполагаю, что "до дальней вершины" должен быть)

рисуем градиенты каждого цвета от 255 до 0 по альфе от центра до дальней точки. микшируем их.
Если радиусы малы - тогда неясно что делать в центре (ни одна вершина не покрывает). А если увеличить радиусы, то вес вершин в других станет > 0. Переменный радиус по углу (используя длины прилегающих к вершине ребер) не годится по той же причине. Что мы видим на картинке:

- цвета в вершинах = заданным
- цвета на ребрах = микс только 2 цветов этого ребра

Представим смежный многоугольник у которого общее ребро с данным. Если условия выше не выполняются, мы получим "шов" на общем ребре

это довольно легко реализуется на OpenGL.
тут есть пример с пирамидой
Там я вижу треугольник(и), для него решение широко известно и проблем нет. Как OpenGL закрашивает N-угольник не знаю, интересно посмотреть. В любом случае мне нужно это в виде текста/кода, а не просто выходная картинка.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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