Рисую кистью No2 - Стекающая акварель

  Кисть №2 имеет в своей основе пиксельный круг, она полупрозрачна, акварельный эффект размытия и стекания краски организован в ней вектором - направлением стекания. Задаётся вектор кликом по специальному полю, выдвигающемуся из левой панели.

  Клик между окружностями сразу задаёт и направление стекания, и так называемую "консолидацию". Если клик сделан поближе к внешней окружности, то консолидация может достигнуть единицы, и тогда организуется строго направленное стекание. Если же клик сделан вблизи внутренней окружности, или внутри неё, то консолидация становится небольшой, или даже нулевой. При небольшом значении консолидации направление вектора стекания разыгрывается при каждом движении стилуса. Это направление случайно, но оно находится в неком секторе, направленном своим центром по указанному вектору.

  Если со стеканием и с изображением красивых стекающих капель всё в порядке, то насколько удобно такой кистью рисовать, это вопрос. Дело в том, что выбрав направление и сделав мазок, обычно хочется это направление тут же поменять. А это значит, что снова приходится тащить стилус к выдвижной панели и кликать там.

  Чтобы избежать таких сложностей, была сделана опция ППП – она выставляется на кнопке «стиль рисования» повыше той кнопки, на которой указан номер кисти. В этой опции консолидация не меняется, а вектор стекания устанавливается по факту последнего сделанного мазка – вектор направляется от точки опускания стилуса на планшет к точке его отрыва (от down к up ).
  Пока мы делаем мазки примерно в одну и ту же сторону, краска гонится по этому направлению, а как только захотим, то пожалуйста – делаем короткий мазочек в сторону и продолжаем делать мазки в другом направлении.

  Рисовать по такой схеме оказалось легко, и вы можете видеть на иллюстрации, насколько хорошо это получается. Я уже проработал таким способом задний фон и синюю чашку, слегка наметил веточку – черешок, и приступил к верхней виноградинке.
  Натурой для пробного рисования мне служила фотография справа, а чтобы не заморачиваться пропорциями и облегчить себе жизнь, я сделал контурную обрисовку фото, и об этом стоит рассказать поподробнее.


    СОЗДАНИЕ КОНТУРНОЙ ОСНОВЫ ДЛЯ ПРОРИСОВКИ

  Рисовать поверх контуров, заранее размещённых на будущем рисунке, очень удобно. Ещё более удобно то, что можно сделать неуничтожаемые кистью контуры.
  Кисть не будет закрашивать пиксели, имеющие цвет фона, если в текстовом поле стоит буква п – символ прозрачности. Этой опцией я и воспользовался.
  Чтобы создать контурное изображение красными тонкими линиями, я вначале провёл дискриминацию цветов на фотографии, а затем обрисовал однородные по цвету области. Обрисовка делается автоматически, уже ранее отработанным способом - http://proza.ru/2022/11/18/1008
  Дополнительные широкие полосы красного цвета делаются по краям рисунка, чтобы не допустить проникновение краски за его пределы.
  По окончании рисования все красные пометки на рисунке легко меняются на близлежащий цвет в режиме Акварель, «Гуашь по чёрному» в одной из опций кисти этого режима.

  В целом, эксперимент показал работоспособность кисти №2. Ранее, в одной из предыдущих программ, подобную кисть я уже использовал - http://proza.ru/2019/07/28/1421

_________
1.04.2023

Дополнение.
  Мне, для организации стекания, нужно было, сразу за окрашиванием очередного пикселя в пиксельном круге, красить в этот же цвет ещё и другой пиксель – в той стороне, куда краска должна течь.
  Этот второй пиксель должен располагаться на квадрате со стороной 5 пикселей, а центром квадрата является первый пиксель.
  Как указать именно на это место я, подумав немного, сообразил. Оказалось, что делается это просто, вот так –

Public Sub Voxy2(M As Integer) 'установка вектора затекания по факту движения
Dim X As Single, Y As Single, A As Single, A1 As Single
  X = Xup - Xdown: Y = Yup - Ydown: A = Abs(X): A1 = Abs(Y): If A1 > A Then A = A1:
  If A < 4 Then
    Form1.Text2 = " перемещение мало": Exit Sub:
    Else: A = A / 2: VXo = X / A: VYo = Y / A:
  End If:
  Form1.Text2 = " vx=" + Str(VXo) + " vy=" + Str(VYo)
End Sub

Значения VXo и VYo это и есть те самые, искомые координаты. Эти переменные имеют целочисленный тип, поэтому результат получается точным.


Рецензии