Идентификация элементов графики по их цвету

   Я уже рассказывал о различных способах выбора, или выделения объектов векторной графики http://proza.ru/2021/12/11/1112
   Идентификация по цвету, использованная в программе «Стереометрические модели», оказалась очень удобной для такого выделения. В ходе развития программы в неё были добавлены Ломаные линии - плоские векторные фигуры, точки которых соединяются между собой.

   В каждую Ломаную входят не одна, а четыре группы точек, соединяемых друг с другом. Эти группы называются абрисами ломаной. Во время вывода графики на поле рисунка сначала рисуются все четыре абриса, если они есть, а затем, делается заливка цветом. Начинается заливка от точки заливки, которая считается центром Ломаной. Абрисы ограничивают заливку, те же из них, которые окажутся в стороне, не заливаются вовсе.
   Абрисы чертятся активным цветом, на иллюстрации этот цвет – синий. Заливка делается цветом фона. На иллюстрации этот фон зелёный.

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

   Абрисы каждой Ломаной, как и каждая Ломаная в целом, идентифицируются по цвету. Цвет в системе RGB имеет три компоненты – красную, зелёную и синюю, а каждая компонента определена двумя байтами (по 4 бита в каждом).
   Младшие байты этих компонент используются для численной идентификации. Младшие три бита задают уникальный номер Ломаной, всего таких уникальных номеров может быть 511 (от №1 до №511), а то, что находится на рисунке, но не имеет номера, за графический элемент не считается.
   Цвет же, тот, который собственно мы и видим, определяется старшими байтами компонент. Как уже говорилось, окрашенные поверхности рисунка, имеющие ноль в первых байтах, графическими элементами не считаются. Поэтому на рисунке могут одновременно сосуществовать как графические элементы, так и декорации к ним.

   Итак, старшие байты создают видимый нами цвет, младшие байты младшими тремя битами определяют номер Ломаной, а что делают 4-е биты младших байтов? На иллюстрации они показаны лиловыми цифрами. Вот они-то как раз и определяют номер абриса, по которому мы кликнули.
   Смотрим на иллюстрацию. На ней демонстрируется Ломаная №1 (1 в первом бите цвета) с четырьмя своими абрисами. Абрисы синие, нулевой абрис залит зелёным цветом. Кликнув по заливке, прочитаем цвет пикселя, по которому кликнули, и получим цвет 00 F0 09.
   Нулевой абрис имеет цвет F0 00 01, первый - F0 08 01, второй - F8 00 01, и третий -  F8 08 01.

   Вот так абрисы программой и различаются. А на вид они одинакового синего цвета. То, что первый чуть зеленее, второй синее, а третий чуть более лиловый, этого наш глаз не замечает.

__________
19.12.2022


Рецензии
Добрый день, Дмитрий.

В связи с тем, что Вы создаёте программы векторной графики и анимации, хочу спросить.

А вот, к примеру, аналог свайпа ( метод набора текстов жестами пальцев по экрану смартфона или планшета ) с использованием объемной библиотеки буквосочетаний и "умного подсказчика" слов при наборе текста, для Windows OS Вы бы могли разработать?

Владимир Щеблыкин   23.12.2022 11:07     Заявить о нарушении
Владимир, я же на пенсии. Работаю только в своё удовольствие.
Во вторых, я ценю литературную речь, и не хочу опускать русский язык на уровень комиксов.
Иными словами, во первых, это не интересно, а во вторых - противно.

Дмитрий Маштаков   23.12.2022 17:40   Заявить о нарушении