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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Заливка  (Прочитано 17888 раз)
nafanya
Гость
« : Ноябрь 18, 2009, 00:55 »

Пишу графические редактор, рисую с помощью КуПейнтера.
Имеется изображение QImage, необходимо сделать заливку (ну как в  пейнте и других редакторах).

//Поясняю: нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая)), потом тыкаем внутрь него мышкой и хотим чтоб этот контур залился цветом))
Как это лучше организовать?
Может быть у кого сохранилась функция?

ЗЫ:Кажется должен быть какойнить рекурсивный алгоритм.. Ничего готового (у QPainter и пр.)) не нашел)..
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #1 : Ноябрь 18, 2009, 15:05 »

Думаю алгоритмы ты должен продумывать сам.
ПС. А вообще задачка хорошая..
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 18, 2009, 15:11 »

//Поясняю: нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая)), потом тыкаем внутрь него мышкой и хотим чтоб этот контур залился цветом))
Как это лучше организовать?
Может быть у кого сохранилась функция?

ЗЫ:Кажется должен быть какойнить рекурсивный алгоритм.. Ничего готового (у QPainter и пр.)) не нашел)..
QGraphicsPolygonItem
Записан
nafanya
Гость
« Ответ #3 : Ноябрь 19, 2009, 13:38 »

QGraphicsPolygonItem ваще не то. ты что не читал вопрос?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Ноябрь 19, 2009, 14:05 »

Странно что непонятно, в букваре даже картинка есть

//Поясняю: нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая)),
Эта "некая фигура" называется "полигон"

потом тыкаем внутрь него мышкой и хотим чтоб этот контур залился цветом))
Выбор/заливка примитива - задача QGraphicsItem (в данном случае QGraphicsPolygonItem)
« Последнее редактирование: Ноябрь 19, 2009, 14:09 от Igors » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Ноябрь 19, 2009, 14:09 »

QGraphicsItem используется в графическом представлении, а он использует QPainter.
Записан

Юра.
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Ноябрь 19, 2009, 14:28 »

QGraphicsItem используется в графическом представлении, а он использует QPainter.
Так пусть посмотрит исходник QGraphicsPolygonItem и скопирует 2 строчки

painter->drawPolygon
clipPath().contains
Записан
ufna
Гость
« Ответ #7 : Ноябрь 19, 2009, 14:37 »

для этого нужно этот полигон вначале найти, а это тоже еще та задачка. Ведь мы же берем картинку, на которой чего угодное есть, и нужно закрасить область, имеющую границы, которые есть "тупо не цвет клика". Вообще, в самом простом варианте - это попиксельный перебор ))
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Ноябрь 19, 2009, 15:17 »

для этого нужно этот полигон вначале найти, а это тоже еще та задачка. Ведь мы же берем картинку, на которой чего угодное есть, и нужно закрасить область, имеющую границы, которые есть "тупо не цвет клика". Вообще, в самом простом варианте - это попиксельный перебор ))
Человек пояснил:
нарисуем несколько линий, пусть из них получится некая замкнутая фигура(или неочень замкнутая))
Из этого следует что полигон он имеет, каким образом - его проблемы

По поводу заливок и.т.п. (то есть если нет полигона). OS (а значит и Qt) поддерживает эти операции с помощью region (регионов). Вот примерно как звучит определение региона в библии Mac (перевод мой  Улыбающийся)

Регион - это то что делит все пиксели экрана на 2 подмножества: те, которые входят в регион и те которые в него не входят. Существуют ограничения на сложность региона и.т.д.

Ну а с перебором по пикселю здесь не прорваться, это точно  Улыбающийся
« Последнее редактирование: Ноябрь 19, 2009, 15:28 от Igors » Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #9 : Ноябрь 19, 2009, 20:18 »

Ну а с перебором по пикселю здесь не прорваться, это точно  Улыбающийся
Да легко.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Ноябрь 19, 2009, 20:42 »

Ну а с перебором по пикселю здесь не прорваться, это точно  Улыбающийся
Да легко.
Ну если море по колено - это всегда радует Улыбающийся Хорошо, есть 3 точки заданные в пикселях (x, y). Залейте этот треугольник прямым перебором. За неделю справитесь? Или это была просто "соленая шутка"?  Улыбающийся 
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #11 : Ноябрь 19, 2009, 20:51 »

Ну а с перебором по пикселю здесь не прорваться, это точно  Улыбающийся
Да легко.
Ну если море по колено - это всегда радует Улыбающийся Хорошо, есть 3 точки заданные в пикселях (x, y). Залейте этот треугольник прямым перебором. За неделю справитесь? Или это была просто "соленая шутка"?  Улыбающийся 
Так "этот треугольник" или "три точки" заливать?
"три точки" я те залью и на коленке Улыбающийся))
Все кроме "три точки" я тебе тоже залью "на коленке"
Треугольник - тоже легко, если замкнутый.
А вот все остальное, это уже рекурсивный обход...
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Ноябрь 19, 2009, 21:12 »

Так "этот треугольник" или "три точки" заливать?
"три точки" я те залью и на коленке Улыбающийся))
Все кроме "три точки" я тебе тоже залью "на коленке"
Треугольник - тоже легко, если замкнутый.
А вот все остальное, это уже рекурсивный обход...
Это треугольник который задан 3-мя точками. Еще упростим задачу - все точки видимы (отсечек по экрану нет) и не лежат на одной прямой (треугольник имеет площадь). Где будете заливать (на коленке или еще где) - не имеет значения. Можете использовать исходники Qt или любые другие. Сможете? Или "хвалилася кобила як вiз з горшками побила"  Улыбающийся
Записан
panAlexey
Гипер активный житель
*****
Offline Offline

Сообщений: 864

Акцио ЗАРПЛАТА!!!!! :(


Просмотр профиля
« Ответ #13 : Ноябрь 19, 2009, 21:24 »

Так "этот треугольник" или "три точки" заливать?
"три точки" я те залью и на коленке Улыбающийся))
Все кроме "три точки" я тебе тоже залью "на коленке"
Треугольник - тоже легко, если замкнутый.
А вот все остальное, это уже рекурсивный обход...
Это треугольник который задан 3-мя точками. Еще упростим задачу - все точки видимы (отсечек по экрану нет) и не лежат на одной прямой (треугольник имеет площадь). Где будете заливать (на коленке или еще где) - не имеет значения. Можете использовать исходники Qt или любые другие. Сможете? Или "хвалилася кобила як вiз з горшками побила"  Улыбающийся
Нет проблем, но баш на баш.
Поможешь разобраться как вот эту хрень (http://gmplib.org/) скомпилировать и подключить к проекту на Qt под мингву, займусь алгоритмом. А нет так нет.
Записан

Win Xp SP-2, Qt4.3.4/MinGW. http://trdm.1gb.ru/
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Ноябрь 19, 2009, 21:46 »

Нет проблем, но баш на баш.
Поможешь разобраться как вот эту хрень (http://gmplib.org/) скомпилировать и подключить к проекту на Qt под мингву, займусь алгоритмом. А нет так нет.
Алексей, в мои планы не входит "что-то с Вас поиметь" - просто все те "заливки" входят в мою специальность/работу. Поэтому я знаю - если человек сможет это сделать с нуля за неделю - он хороший программист. Вы сказали "легко" - отвечайте за свои слова или воэьмите их взад Улыбающийся Я не заявлял что могу откомпилить все что хошь под MinGW - "я умею делать только то что я умею делать" Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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