Помощь - Поиск - Пользователи - Календарь
Полная версия: Раскраска
Форум «Всё о Паскале» > Разработка ПО, алгоритмы, общие вопросы > Общие вопросы разработки программ
Jekaterina
Здравствуйте! Я хотела бы узнать, как написать программу-раскраску - например, ребенок выбирает картинку и с помощью палитры ее раскрашивает в различные цвета. В интернете часто встречаются ява-япплеты, есть, правда, и программа Раскрашка. Но мне хотелось бы придумать что-то простое самой. Можно ли такую программу написать с помощью визуального бейсика? Как можно задать возможность раскрашивать отдельные области рисунка? Заранее спасибо за идеи.
Lapp
Идея интересная. Написать, конечно, можно, на чем угодно - можно и на бейсике, но тут (на этом Форуме) больше бы приветствовались Паскаль или Дельфи..
Как я понял, есть набор контурных рисунков, по которым производится раскраска - да? Вопрос, как задавать цвет. Можно делать номерами (знаменитое @painting by numbers"), можно семплами.. Можно вообще оставить выбор цвета на усмотрение пользователя.

Раскрашивать можно разными способами. Самое простое - заполнение области цветом. Только боюсь, это не очень интересно - делается в одно касание. Можно мазками (или распылять), но с ограничением на область. Тут есть, над чем подумать.. А ты как предполагала?
Jekaterina
Я как раз хотела бы щелчком - мои дочки до большего не доросли smile.gif . Я немного разбираюсь в Дельфи, но не понимаю, как описывается такое закрашивание.
klem4
Цитата
Я как раз хотела бы щелчком - мои дочки до большего не доросли smile.gif . Я немного разбираюсь в Дельфи, но не понимаю, как описывается такое закрашивание.


У класса TCanvas есть такой метод:
FloodFill(x, y: Integer; Color: TColor; FillStyle: TFillStyle);


Он производит заливку канвы текущей кистью, если FillStyle = fsSurface, заливка распространяется на все соседние точки от (x, y) с цветом Color. Если FillStyle = fsBorder, заливка прекращается на точках с цветом Color.

Это конечно в случае если контурный рисунок выполнен на канве.
Бродяжник
Копайте в сторону FloodFill.
Это такой метод, который позволяет закрашивать замкнутые области. При этом можно закрашивать либо область, очерченную линией определенного цвета, либо пятно, залитое определенным цветом. В параметрах указывается координаты какой-либо точки внутри данного контура/пятна, цвет контура/пятна, а также что мы хотим закрашивать - контур или пятно.
То есть:
- исходный рисунок состоит из замкнутых контуров одного заранее известного цвета X.
- при щелчке на рисунке определяется цвет пиксела под курсором. Если это цвет Х, то мы щелкнули на границе, поэтому ничего красить не будем. Если это другой цвет, то вызываем FloodFill, передавая ей координаты пиксела под курсором, цвет Х и константу fsBorder, говорящую нам о том, что заливать будем контур, а не пятно. При этом заливка будет сделана цветом и стилем текущей кисти.
Вот такая вот вводная.
(Хотел было набросать небольшую демку, но интузизизьма не хватило dry.gif )
Правка: Опять я долго набирал ответ... smile.gif
Jekaterina
Спасибо за советы! Попробую разобраться во всем написанном. Может быть, вам встречались в сети какие-то обучающие разработки, литература на эту тему (именно о такого типа прграммах)? Я ничего подходящего не обнаружила.
Бродяжник
В 3-й и 6-й версиях Дельфи есть такой пример: GraphEx (папка ~\DEMOS\DOC\GRAPHEX). Видимо, есть и в других версиях. Поройтесь в исходниках. Там, правда, нет в точности того, что Вам нужно, но какую-то пользу извлечь можно.
Jekaterina
Спасибо, Бродяжник. Буду смотреть.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.