Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
88
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
      1. Функция FromArgb

В VB существует 16 миллионов цветов с лишним (точнее - 16777216)! Их имен мы не знаем, да имен этих и не существует. Тем не менее, мы должны научиться управлять этими цветами. Чтобы навести порядок в этой массе цветов, VB предлагает функцию FromArgb. Она принадлежит структуре Color. Суть ее вот в чем.

Вспомним, что любую краску можно получить, смешав в определенной пропорции красную (Red), зеленую (Green) и синюю (Blue) краски. В VB каждой краски в смесь можно положить от 0 до 255 единиц. Функция FromArgb как раз и смешивает эти краски. Пусть мы хотим покрасить форму краской, в которую мы положили и смешали 200 единиц красной, 40 единиц зеленой и 250 единиц синей краски. Для этого пишем такой оператор:

Me.BackColor = Color.FromArgb(200, 40, 250)

Здесь мы использовали вариант функции FromArgb с тремя параметрами.

Примеры:

FromArgb (255, 0, 0)

Красный цвет

FromArgb (0, 255, 0)

Зеленый цвет

FromArgb (0, 0, 255)

Синий цвет

FromArgb (255, 255, 0)

Желтый цвет

Вы видите, что желтый цвет – это смесь красного с зеленым.

Чем меньше каждой краски мы положим, тем темнее будет цвет, чем больше – тем светлее:

FromArgb (70, 90, 88)

Темный цвет (потому что числа маленькие)

FromArgb (210, 250, 202)

Светлый цвет (потому что числа большие)

FromArgb (0, 0, 0)

Черный цвет

FromArgb (255, 255, 255)

Белый цвет

Если каждой краски положить поровну, получится серый цвет:

FromArgb (90, 90, 90)

Темно-серый цвет

FromArgb (220, 220, 220)

Светло-серый цвет

Вот программа, которая красит форму, рисует и заливает эллипс, как на Рис. 12 .57:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Цвет1, Цвет2 As Color

Цвет1 = Color.FromArgb(250, 230, 252)

Цвет2 = Color.FromArgb(220, 170, 240)

Me.BackColor = Цвет1 'Красим форму

Dim Перо As New Pen(Color.FromArgb(140, 120, 90), 40)

Dim Кисть As New SolidBrush(Цвет2)

Dim Гр As Graphics = Me.CreateGraphics

'Рисуем и заливаем эллипс:

Гр.DrawEllipse(Перо, 50, 30, 300, 200)

Гр.FillEllipse(Кисть, 50, 30, 300, 200)

End Sub

Здесь цвет формы, пера и кисти выбран при помощи функции FromArgb.

Рис. 12.57

      1. Прозрачность

Функция FromArgb позволяет управлять прозрачностью цвета. Для этого используется ее вариант не с тремя, а с четырьмя параметрами. Второй, третий и четвертый параметры имеют привычный нам смысл количества красной, зеленой и синей краски. А вот первый параметр определяет прозрачность цвета. Если он равен 255, то цвет полностью непрозрачен, а если 0 – то полностью прозрачен (невидим).

Вот программа:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim Гр As Graphics = Me.CreateGraphics

Dim Цвет1, Цвет2, Цвет3, Цвет4 As Color

Цвет1 = Color.FromArgb(255, 50, 130, 152) 'Совершенно непрозрачный цвет

Цвет2 = Color.FromArgb(200, 50, 130, 152) 'Немного прозрачный цвет

Цвет3 = Color.FromArgb(150, 50, 130, 152) 'Более прозрачный цвет

Цвет4 = Color.FromArgb(100, 50, 130, 152) 'Еще более прозрачный цвет

Dim Перо As New Pen(Color.Black, 40) 'Черное перо для горизонтальной линии

Dim Перо1 As New Pen(Цвет1, 40)

Dim Перо2 As New Pen(Цвет2, 40)

Dim Перо3 As New Pen(Цвет3, 40)

Dim Перо4 As New Pen(Цвет4, 40)

Гр.DrawLine(Перо, 30, 100, 300, 100) 'Чертим горизонтальную линию

Гр.DrawLine(Перо1, 80, 60, 80, 200) 'Чертим левую вертикальную линию

Гр.DrawLine(Перо2, 130, 60, 130, 200) 'Чертим вторую слева вертикальную линию

Гр.DrawLine(Перо3, 180, 60, 180, 200) 'Чертим третью слева вертикальную линию

Гр.DrawLine(Перо4, 230, 60, 230, 200) 'Чертим правую вертикальную линию

End Sub

Результат ее работы вы видите на Рис. 12 .58. Четыре вертикальные линии одного и того же цвета (50, 130, 152), но разной прозрачности нарисованы на фоне черной горизонтальной линии.

Рис. 12.58

Попробуйте несколько раз нажать на кнопку. Сможете объяснить результат?

«Атака абстракциониста». На экране рисуются один за другим в быстром темпе залитые случайными цветами эллипсы или прямоугольники случайных размеров и местоположения. Получается очень ярко и живописно.

Попробуйте из картинки в левой части Рис. 12 .59 сделать картинку в правой.

Рис. 12.59

Указание: Для этого заполните пространство фотографии белыми концентрическими эллипсами с разной прозрачностью.

Представьте себе куб, собранный из множества кубиков. Его высота – 256 кубиков, ширина и толщина – тоже по 256 кубиков. Получается ровно 16777216 кубиков – по числу цветов в VB. Каждый кубик покрашен в свой цвет. Цвета не повторяются. Система раскраски такая. Слева направо растет от 0 до 255 красная составляющая в цвете кубиков, сверху вниз – зеленая, от нас вдаль – синяя. Так что самый левый верхний ближний кубик получается абсолютно черным, а самый правый нижний дальний кубик – абсолютно белым. Сразу все кубики видеть мы, конечно, не можем, но мы можем делать срез куба в любом месте параллельно любой из его граней, в результате чего на срезе будем видеть квадрат, состоящий из 256*256 разноцветных квадратиков. Вот эту задачу среза я бы и хотел вам предложить. Программа просит пользователя выбрать один из трех основных цветов (это удобно сделать через меню) и его насыщенность (число от 0 до 255). Этим определяется место среза. Затем программа чертит на форме этот разноцветный срез. Конечно, квадратики получатся очень маленькими, но это ничего.

Указание: Используйте процедуру с двумя параметрами: выбранный пользователем цвет (один из трех) и его насыщенность.

Кстати, догадайтесь, из каких цветов составлена главная диагональ куба, проведенная между двумя упомянутыми мной кубиками.