КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Работа с цветом. Заливка. Стиль линийи заливкиСначала поговорим о стиле линий. Если вы хотите, чтобы линии, которыми чертятся фигуры, были потолще, используйте процедуру SetLineStyle. Вот ее вызов - SetLineStyle(0, 0, ThickWidth). Это приказ отныне рисовать линии толстыми. Если вы хотите вернуться к тонким линиям, напишите SetLineStyle(0, 0, NormWidth). Первый параметр процедуры SetLineStyle управляет стилем прямых отрезков (штриховые, пунктирные и др.). Попробуйте вместо 0 написать 1, 2 или 3 и посмотрите, что получится. Второго параметра касаться не будем.
А теперь поговорим о цвете. Если цвет точки задается непосредственно в вызове процедуры, которая рисует точку (PutPixel), то цвета многих других фигур задаются по-иному. Делает это специальная процедура SetColor. Пример: SetColor(Yellow) приказывает компьютеру отныне рисовать фигуры желтым цветом. Вот поясняющий фрагмент: Circle(100,100,20); {окружность белая и тонкая, так как по умолчанию {Паскаль все рисует белым цветом тонкими линиями} SetColor(Yellow); Circle(150,100,20); {желтая тонкая окружность } SetLineStyle(0, 0, ThickWidth); Circle(200,100,20); {желтая толстая окружность} SetColor(Blue); SetLineStyle(0, 0, NormWidth); Circle(250,100,20); {синяя тонкая окружность} Работая в Паскале, вы можете покрасить любым цветом (залить краской) любую область экрана внутри замкнутого контура. Пусть вы нарисовали такую картинку:
После этого вы можете ее покрасить, например, вот так: Как красить? Начнем с процедуры SetFillStyle. Подобно тому, как процедура SetColor сама ничего не рисует, а только устанавливает цвет линий на будущее, процедура SetFillStyle сама ничего не заливает, а устанавливает цвет и стиль заливкина будущее. Например, SetFillStyle(1, Green) устанавливает заливку зеленым цветом. На единичку пока не обращаем внимания. Сам процесс заливкивызывает процедура FloodFill. Например, FloodFill(200, 150, Blue) вызывает следующие действия Паскаля: В точке экрана с координатами х=200 и у=150 встает “маляр с ведром краски”, цвет которой был указан в обращении к процедуре SetFillStyle (в нашем примере - зеленый), и начинает эту краску разливать вокруг себя. Краска свободно растекается по экрану и преградой для нее становится только линия, имеющая цвет, указанный в обращении к процедуре FloodFill, то есть синий. Очевидно, если синий контур не будет замкнут вокруг “маляра”, то краска прольется на весь экран. Пример: Следующий фрагмент нарисует желтый квадрат и зальет его красным цветом: SetColor(Yellow); SetFillStyle(1, Red); Rectangle(200,50,300,150); FloodFill(250, 100, Yellow) А теперь попробуем поставить “маляра” вне квадрата, записав в нашем фрагменте вместо FloodFill(250, 100, Yellow) например, FloodFill(250, 200, Yellow). Теперь красной будет вся поверхность экрана, кроме области внутри квадрата. Распространенная ошибка новичков - на вопрос о том, каким цветом будет красить оператор FloodFill(250, 100, Yellow), они отвечают “Желтым”, хотя нужно отвечать “Не знаю, надо посмотреть в SetFillStyle”.
Напомним, что в нашем случае только желтые линии и области являются преградой для красной краски. Например, попытаемся покрасить желтой краской маленький прямоугольник, помеченный единичкой, полученный пересечением больших красного и синего прямоугольников:
Для этого поместим “маляра” внутрь этого прямоугольника и используем операторы SetFillStyle(1, Yellow) и FloodFill( ¼ , ¼ ,Blue ). Мы получим следующую картину: Очевидно, при помощи FloodFill нужный прямоугольник закрасить невозможно, так как он ограничен линиями разного цвета.
Заливку можно делать не только сплошной, но и по-разному заштрихованной. Для этого вместо единички в обращении к процедуре SetFillStyle попробуйте другие целые числа - 2, 3 и др.
Задание 68: Усовершенствуйте снеговика из 9.3. Он должен стать таким - с красным носом, красными губами, желтой шапкой и толстым синим посохом. При помощи оператора WriteLn сделайте надпись “Это снеговик”.
|