Эксперименты с графикой

Дмитрий Маштаков
  В статье я хочу поделиться своими соображениями и начальным опытом на тему "Как можно сделать свой собственный графический редактор так, чтобы работать в нём было интересно и удобно".

  У вас, уважаемые читатели, сразу же может возникнуть вопрос - а зачем это нужно делать? Ведь есть прекрасные графические редакторы разного уровня - и простые, и профессиональные, и они, разумеется, отлично справляются со всеми мыслимыми задачами по части рисования или корректировки фотографий. Зачем изобретать велосипед?

  Сразу скажу, "изобретение велосипеда", это моё давнее увлечение - http://www.proza.ru/2018/10/11/464
  Изобретать велосипед ОЧЕНЬ интересно.
  А, если серьёзно, то на этом пути обретаешь массу полезных навыков, и находишь массу практических применений, которые, к твоему удивлению, даже перекрывают то, что ты можешь найти на сегодняшний день в интернете.
  Если говорить конкретно, я не мог приемлемо откорректировать изображения на старых фотоснимках, не мог удобно поменять один цвет на другой, или расширить тонкие линии графика.

  Более того, мне показалось, что и рисовать в существующих редакторах неудобно.
  В самом деле - Вы выбираете цвет, некоторое время изображаете им, например морковку, но вот Вам захотелось этот цвет чуть-чуть изменить, поскольку морковка снизу Вам кажется чуть-чуть потемней и пооранжевей. А сверху она вроде как белёсая.
  Что делает в таких случаях художник?
  Он тычет своею кистью в нужную краску, и привносит цвет этой краски, добавляя её в ту смесь на палитре, которую он только что использовал.
  Человек, сидящий за компьютером, такого сделать не может.
  Он должен сначала полезть в верхнюю часть экрана, открыть там меню, выбрать в меню пункт "изменить палитру", затем составить цвет для рисования заново - выбрать цвет, затемнить его должным образом, кликнуть мышкой "Ok", а после этого ещё найти на экране морковку, чтобы дорисовать новым цветом нижнюю её часть.
  А что, если он с цветом ошибся? Как можно сравнивать цвета, расположенные в разных частях экрана и имеющие разное цветовое окружение?
  Это очень неудобно.

  Уважаемые читатели, если вы знаете программу, в которой цвет изменяется проще, укажите мне на неё. Мне интересна эргономика работы такой программы.
  Смешение цветов в своей программе я уже организовал, но расскажу об этом отдельно, и в следующий раз. А пока начну с начала. Расскажу, какие инструменты для рисования я попытался сделать, и о том, какие результаты получились.
  Программу я делал применительно к тому, что у меня есть. Работаю с ноутбуком без мыши - перемещаю стрелочку-указатель движением пальца по пластине. Потому и инструменты получились соответствующие.

  КИСТЬ

  Инструмент, самый распространённый. В моей программе его выбирать не надо - средним пальцем левой руки нажимаете левую кнопку "мыши", а средним пальцем правой руки ведёте по пластинке. Рисуете, значит. Отпустили кнопку - линия прервалась. Девять градаций толщины линии (диаметр точки в пикселях) легко задаётся кнопкой с цифрой в верхней части экрана.
  Клик по кнопке увеличивает толщину линии, клик на маленькой кнопочке снизу - уменьшает её.
  Клики продублированы кнопками вверх-вниз, которые расположены на видном месте клавиатуры недалеко от правой руки.
  К сожалению, я не придумал другого способа управления размером точки при рисовании.
  Может быть, Вы мне что-либо посоветуете?
  Известно, что при старательном рисовании человек иногда высовывает язык. За этим можно было бы проследить с помощью камеры ноутбука. Как было бы хорошо, высунул язык - и линия становится тоньше!

  РАСТУШЁВКА

  Странно, но такого простого инструмента я в известных мне редакторах не обнаружил.
  Я растушёвку в движении делаю, нажимая тем же среднем пальцем левой руки не на левую, а на правую кнопку "мыши". Опять же, это очень удобно, поскольку просто клик по правой кнопке в моей программе считывает цвет (тем самым он заменяет инструмент "пипетка"). С этого же цвета растушёвка и начинается.
  Градиент растушёвки задаётся отдельной кнопочкой с чередующимися цифрами от 0 до 9. Градиент растушёвки выставляется кнопочкой точно также, как работает кнопочка выбора ширины кисти.
  Цифра 9 означает самый плавный, широкий градиент. Следы от такой растушёвки вы можете видеть на иллюстрации.
 
  Алгоритм растушёвки следующий - клик правой кнопки "мыши" захватывает цвет, но точка этим цветом ставится только тогда, когда указатель (у меня указателем является стрелочка, ничего другого я придумывать не стал) сходит с закрашенной однотонным цветом области и обнаруживает другой цвет.
  В этот момент ставится точка. Цвет для точки берётся смешением прежнего и нового обнаруженного под указателем цвета. Образуется небольшая круговая область, заполненная однородным цветом. При дальнейшем движении указателя процесс повторяется.

  По физическим ощущениям растушёвка напоминает хорошо известное всем растирание пальцем пастели. Можно вести растушёвку в одну сторону, создавая следы, похожие на переплетающиеся "дымы". Можно водить пальцем туда-сюда, смешивая цвета, как это тоже принято при работе с пастелью.
  Оригинальный результат получается, если указать для градиента растушёвки цифру ноль. Круг фонового цвета появляется сразу после схода указателя с окрашенной поверхности, "отъедая" от неё заметный кусочек. А если водить пальцем туда-сюда, то растушёвки, как таковой, не получится. Вместо этого получится контрастная и причудливо изрезанная структура, которая, если её затем слегка и плавно притушевать, вполне может напоминать уточку с перьями, или может стать основой причёски для некого персонажа.

  КАРАНДАШ

  Этот инструмент реализуется при движении указателя с одновременным нажатием клавиши Shift *
Цвет точки в этом режиме получается следующим образом.
  Как только указатель сходит с равномерно окрашенной поверхности, берётся цвет фона. Он берётся как средний, по четырём диагональным точкам, расположенным на расстояниях плюс-минус 2 пикселя от текущей точки. Затем к этому цвету в отношении 70% к 30% примешивается тёмный заданный цвет, например, чёрный. Результат получается такой - чем дольше водишь карандашом по одному и тому же месту, тем темнее это место становится.
  Карандаш очень хорошо подходит для лёгких набросков в тонких линиях.
_________
* Недалеко от клавиши Shift находятся клавиши CapsLook и Ctrl, которые удобно использовать для управления размером точки. Палец по этим клавишам можно перемещать не глядя на них, на ощупь.

  ЛАСТИК

  Зачем изобретать новый инструмент? Я организовал "ластик" так - при нажатии клавиши "пробел" активный цвет и цвет фона меняются своими значениями.
  А где находится клавиша "пробел"? А вот она - над рукой, впритык к той пластине, по которой мы водим пальцем, изображая движение "мыши".


  Ну, вы поняли, я не стремлюсь конкурировать с имеющимися программами. Я довольствуюсь теми возможностями, которые без особого напряжения предоставляет Визуал Бейсик 6. Для меня более важно, что результат получается удобным, интересным и как бы рукотворным. А следовательно и для рисования он вполне применим.
____________
Спасибо за внимание. Продолжение тут - http://www.proza.ru/2019/06/07/508

========
С тех пор, как была написана эта статья, прошло более полугода, и я значительно продвинулся. Редактор разросся до размера 760кб, что в общем-то немного, зато появился развитый набор кистей и разнообразные возможности анимации. Короче, на месте "изобретённого велосипеда" появилась целая стоянка разных механизмов, которые я изредка осматриваю, и которыми с удовольствием пользуюсь.

19.01.2020