Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2015, 15:16   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию Qt рисование. залить ограниченую область

Qt
Как залить другим цветом произвольную ограниченную область?
вот два изображения -исходное и что должно получится
Изображения
Тип файла: jpg r1.jpg (17.9 Кб, 257 просмотров)
Тип файла: jpg r2.jpg (18.9 Кб, 243 просмотров)
SAMOUCHKA вне форума Ответить с цитированием
Старый 03.08.2015, 16:51   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

https://en.wikipedia.org/wiki/Flood_fill
http://www.codeproject.com/Articles/...fill-algorithm
waleri вне форума Ответить с цитированием
Старый 03.08.2015, 17:24   #3
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

но это наверно очень медленно?
SAMOUCHKA вне форума Ответить с цитированием
Старый 03.08.2015, 21:06   #4
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от SAMOUCHKA Посмотреть сообщение
но это наверно очень медленно?
Иначе никак. Фигура ведь произвольная... может быть и шариком и квадратиком.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 03.08.2015, 21:20   #5
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

В WinAPI GDI32 есть clipping region. Например SelectClipRgn(). Не поверю что в QT нет аналога, хоть и не работал с ним.
А руками делать - это уже как сами сделаете, можно и быстро.
ResourceSpace вне форума Ответить с цитированием
Старый 03.08.2015, 21:55   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Для сложных регионов заполнение не сильно быстрее будет.
Кроме того, регион еще создать надо - тоже задача не из тривиальных.
В Windows регионы - это набор упорядоченных прямоугольников. Вот и прикиньте, сколько прямоугольников нужны для описания треугольника.
Собственно, для создания произвольного региона надо будет проверить каждый пиксель, что не сильно отличается от flood fill алгоритма.
waleri вне форума Ответить с цитированием
Старый 04.08.2015, 00:31   #7
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

С чего вдруг прямоугольников? А как тогда по-вашему работают?:
CreatePolygonRgn
CreateRoundRectRgn
CreateEllipticRgn
И работа с даже довольно сложными регионами никогда и никак не замедляло.

А вообще я забыл про ExtFloodFill() в WinAPI есть, тогда как в таком крутом QT нет аналога?

Какая IDE? Версия QT?
ResourceSpace вне форума Ответить с цитированием
Старый 04.08.2015, 00:54   #8
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Qt это кроссплатформенная хренька, да и что такого набора я чёт не видел.
А вот гугл.
Т.е. как бы он не нужен, ну вы поняли.
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 04.08.2015, 01:44   #9
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Зная точки фигуры, можно поступить так:

Код:
void MainWindow::paintEvent(QPaintEvent *event){

    QPolygon poly;
    poly << QPoint(50,10);
    poly << QPoint(10,100);
    poly << QPoint(100,100);

    QPainter painter(this);
    painter.drawPolygon(poly);  //  рисуем контур фигуры

    QPainterPath path;
    path.addPolygon(poly);

    QBrush brush;
    brush.setColor(Qt::yellow);
    brush.setStyle(Qt::SolidPattern);

    painter.fillPath(path,brush);  //  заливаем эту фигуру
}
Но чтоб просто залить область выбрав точку, такого не встречал.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 04.08.2015 в 01:56.
Krasiosoft вне форума Ответить с цитированием
Старый 04.08.2015, 07:27   #10
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию

А что если -
найти границу области,
заполнить ее координатами массив отрезков (тут одновременно надо экстраполировать).
А Из этих отрезков рисовать закрашенный полигон, это нарисовать можно средствами Qt.
Не знаю, может так быстрее будет?
SAMOUCHKA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Залить на форум misher О форуме и сайтах клуба 5 15.08.2010 11:44
Залить на народ. misher Свободное общение 2 21.07.2010 22:27
Залить файл на sendspace RIO Работа с сетью в Delphi 4 20.06.2010 01:18
Залить сайт Дініс Свободное общение 12 20.12.2009 14:28
Залить цветом область. gusluk Мультимедиа в Delphi 3 31.10.2009 05:58