Найти в Дзене
Дмитрий Маштаков

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

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

Я уже рассказывал о различных способах выбора, или выделения объектов векторной графики http://proza.ru/2021/12/11/1112

Идентификация по цвету, использованная в программе «Стереометрические модели», оказалась очень удобной для такого выделения. В ходе развития программы в неё были добавлены Ломаные линии - плоские векторные фигуры, точки которых соединяются между собой.

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

окно редактора. Выбрана Ломаная 1
окно редактора. Выбрана Ломаная 1

Абрисы чертятся активным цветом, на иллюстрации этот цвет – синий. Заливка делается цветом фона. На иллюстрации этот фон зелёный.

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

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

Эта тактика выделения очень удобна. Но как же она реализуется?

Абрисы каждой Ломаной, как и каждая Ломаная в целом, идентифицируются по цвету. Цвет в системе 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