Сначала более простая проблема: предположим, вы просто хотели использовать один цвет. Вы можете начать со списка контуров, а затем сканировать все окно по строке и столбцу: всякий раз, когда вы пересекаете границу, вы увеличиваете или уменьшаете (в зависимости от смысла пересечения) счетчик how_many_outlines_am_I_inside
. Когда он равен нулю, закрасьте пиксель белым, иначе закрасьте его зеленым (и я полагаю, черный для самой границы). Это будет правильно обрабатывать самопересекающиеся кривые.
Теперь для оттенков. Судя по вашему примеру, затенение является равномерным по вертикали, но изменяется по горизонтали, масштабируется по всей ширине контура. Поэтому вместо простого счетчика вам понадобится стек (я рекомендую stl :: list) контуров, чтобы вы могли отслеживать, какой контур (из тех, что вы внутри) является верхним, чтобы вы могли вычислить какую долю расстояния вы преодолели от х мин до х макс . Наконец, для полупрозрачности (как со звездой, частично видимой через прямоугольник): вам придется самостоятельно выбирать правила, я не могу вывести их из глазного яблока, но стек должен облегчить реализацию.
Хотите помочь с кодом C ++?