Russian Qt Forum
Ноябрь 24, 2024, 22:57
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Заливка
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Заливка (Прочитано 18019 раз)
nafanya
Гость
Заливка
«
:
Ноябрь 18, 2009, 00:55 »
Пишу графические редактор, рисую с помощью КуПейнтера.
Имеется изображение QImage, необходимо сделать заливку (ну как в пейнте и других редакторах).
//Поясняю: нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая)), потом тыкаем внутрь него мышкой и хотим чтоб этот контур залился цветом))
Как это лучше организовать?
Может быть у кого сохранилась функция?
ЗЫ:Кажется должен быть какойнить рекурсивный алгоритм.. Ничего готового (у QPainter и пр.)) не нашел)..
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: Заливка
«
Ответ #1 :
Ноябрь 18, 2009, 15:05 »
Думаю алгоритмы ты должен продумывать сам.
ПС. А вообще задачка хорошая..
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #2 :
Ноябрь 18, 2009, 15:11 »
Цитата: nafanya от Ноябрь 18, 2009, 00:55
//Поясняю: нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая)), потом тыкаем внутрь него мышкой и хотим чтоб этот контур залился цветом))
Как это лучше организовать?
Может быть у кого сохранилась функция?
ЗЫ:Кажется должен быть какойнить рекурсивный алгоритм.. Ничего готового (у QPainter и пр.)) не нашел)..
QGraphicsPolygonItem
Записан
nafanya
Гость
Re: Заливка
«
Ответ #3 :
Ноябрь 19, 2009, 13:38 »
QGraphicsPolygonItem ваще не то. ты что не читал вопрос?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #4 :
Ноябрь 19, 2009, 14:05 »
Странно что непонятно, в букваре даже картинка есть
Цитата: nafanya от Ноябрь 18, 2009, 00:55
//Поясняю: нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая)),
Эта "некая фигура" называется "полигон"
Цитата: nafanya от Ноябрь 18, 2009, 00:55
потом тыкаем внутрь него мышкой и хотим чтоб этот контур залился цветом))
Выбор/заливка примитива - задача QGraphicsItem (в данном случае QGraphicsPolygonItem)
«
Последнее редактирование: Ноябрь 19, 2009, 14:09 от Igors
»
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Заливка
«
Ответ #5 :
Ноябрь 19, 2009, 14:09 »
QGraphicsItem используется в графическом представлении, а он использует QPainter.
Записан
Юра.
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #6 :
Ноябрь 19, 2009, 14:28 »
Цитата: lit-uriy от Ноябрь 19, 2009, 14:09
QGraphicsItem используется в графическом представлении, а он использует QPainter.
Так пусть посмотрит исходник QGraphicsPolygonItem и скопирует 2 строчки
painter->drawPolygon
clipPath().contains
Записан
ufna
Гость
Re: Заливка
«
Ответ #7 :
Ноябрь 19, 2009, 14:37 »
для этого нужно этот полигон вначале найти, а это тоже еще та задачка. Ведь мы же берем картинку, на которой чего угодное есть, и нужно закрасить область, имеющую границы, которые есть "тупо не цвет клика". Вообще, в самом простом варианте - это попиксельный перебор ))
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #8 :
Ноябрь 19, 2009, 15:17 »
Цитата: ufna от Ноябрь 19, 2009, 14:37
для этого нужно этот полигон вначале найти, а это тоже еще та задачка. Ведь мы же берем картинку, на которой чего угодное есть, и нужно закрасить область, имеющую границы, которые есть "тупо не цвет клика". Вообще, в самом простом варианте - это попиксельный перебор ))
Человек пояснил:
Цитата: nafanya от Ноябрь 18, 2009, 00:55
нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая))
Из этого следует что полигон он имеет, каким образом - его проблемы
По поводу заливок и.т.п. (то есть если нет полигона). OS (а значит и Qt) поддерживает эти операции с помощью region (регионов). Вот примерно как звучит определение региона в библии Mac (перевод мой
)
Регион - это то что делит все пиксели экрана на 2 подмножества: те, которые входят в регион и те которые в него не входят. Существуют ограничения на сложность региона и.т.д.
Ну а с перебором по пикселю здесь не прорваться, это точно
«
Последнее редактирование: Ноябрь 19, 2009, 15:28 от Igors
»
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: Заливка
«
Ответ #9 :
Ноябрь 19, 2009, 20:18 »
Цитата: Igors от Ноябрь 19, 2009, 15:17
Ну а с перебором по пикселю здесь не прорваться, это точно
Да легко.
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #10 :
Ноябрь 19, 2009, 20:42 »
Цитата: panAlexey от Ноябрь 19, 2009, 20:18
Цитата: Igors от Ноябрь 19, 2009, 15:17
Ну а с перебором по пикселю здесь не прорваться, это точно
Да легко.
Ну если море по колено - это всегда радует
Хорошо, есть 3 точки заданные в пикселях (x, y). Залейте этот треугольник прямым перебором. За неделю справитесь? Или это была просто "соленая шутка"?
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: Заливка
«
Ответ #11 :
Ноябрь 19, 2009, 20:51 »
Цитата: Igors от Ноябрь 19, 2009, 20:42
Цитата: panAlexey от Ноябрь 19, 2009, 20:18
Цитата: Igors от Ноябрь 19, 2009, 15:17
Ну а с перебором по пикселю здесь не прорваться, это точно
Да легко.
Ну если море по колено - это всегда радует
Хорошо, есть 3 точки заданные в пикселях (x, y). Залейте этот треугольник прямым перебором. За неделю справитесь? Или это была просто "соленая шутка"?
Так "этот треугольник" или "три точки" заливать?
"три точки" я те залью и на коленке
))
Все кроме "три точки" я тебе тоже залью "на коленке"
Треугольник - тоже легко, если замкнутый.
А вот все остальное, это уже рекурсивный обход...
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #12 :
Ноябрь 19, 2009, 21:12 »
Цитата: panAlexey от Ноябрь 19, 2009, 20:51
Так "этот треугольник" или "три точки" заливать?
"три точки" я те залью и на коленке
))
Все кроме "три точки" я тебе тоже залью "на коленке"
Треугольник - тоже легко, если замкнутый.
А вот все остальное, это уже рекурсивный обход...
Это треугольник который задан 3-мя точками. Еще упростим задачу - все точки видимы (отсечек по экрану нет) и не лежат на одной прямой (треугольник имеет площадь). Где будете заливать (на коленке или еще где) - не имеет значения. Можете использовать исходники Qt или любые другие. Сможете? Или "хвалилася кобила як вiз з горшками побила"
Записан
panAlexey
Гипер активный житель
Offline
Сообщений: 864
Акцио ЗАРПЛАТА!!!!! :(
Re: Заливка
«
Ответ #13 :
Ноябрь 19, 2009, 21:24 »
Цитата: Igors от Ноябрь 19, 2009, 21:12
Цитата: panAlexey от Ноябрь 19, 2009, 20:51
Так "этот треугольник" или "три точки" заливать?
"три точки" я те залью и на коленке
))
Все кроме "три точки" я тебе тоже залью "на коленке"
Треугольник - тоже легко, если замкнутый.
А вот все остальное, это уже рекурсивный обход...
Это треугольник который задан 3-мя точками. Еще упростим задачу - все точки видимы (отсечек по экрану нет) и не лежат на одной прямой (треугольник имеет площадь). Где будете заливать (на коленке или еще где) - не имеет значения. Можете использовать исходники Qt или любые другие. Сможете? Или "хвалилася кобила як вiз з горшками побила"
Нет проблем, но баш на баш.
Поможешь разобраться как вот эту хрень (
http://gmplib.org/
) скомпилировать и подключить к проекту на Qt под мингву, займусь алгоритмом. А нет так нет.
Записан
Win Xp SP-2, Qt4.3.4/MinGW.
http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Заливка
«
Ответ #14 :
Ноябрь 19, 2009, 21:46 »
Цитата: panAlexey от Ноябрь 19, 2009, 21:24
Нет проблем, но баш на баш.
Поможешь разобраться как вот эту хрень (
http://gmplib.org/
) скомпилировать и подключить к проекту на Qt под мингву, займусь алгоритмом. А нет так нет.
Алексей, в мои планы не входит "что-то с Вас поиметь" - просто все те "заливки" входят в мою специальность/работу. Поэтому я знаю - если человек сможет это сделать с нуля за неделю - он хороший программист. Вы сказали "легко" - отвечайте за свои слова или воэьмите их взад
Я не заявлял что могу откомпилить все что хошь под MinGW - "я умею делать только то что я умею делать"
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...