Я реализовал типичный алгоритм заливки, и он работает, как и ожидалось, когда используются сплошные цвета, когда я использую евклидово расстояние между компонентами ARGB для сравнения цветов.
Моя проблема в том, что если вы нарисуете что-то вроде красной линии с сглаживанием на прозрачном фоне, мой алгоритм заливки не будет заполнять большинство полупрозрачных пикселей, оставляя рамки вокруг объектов. В частности, для этого примера, центр линии имеет сплошной красный цвет (т. Е. (255, 255, 0, 0) в формате ARGB), а полосы линии также имеют сплошной красный цвет, но альфа этих пикселей варьируется до 1% альфа. (т.е. (1, 255, 0, 0)). Как правило, я хочу иметь возможность рисовать, скажем, контур сглаженного круга, заливать заливку в центре и не оставлять ее за пределами.
Какую функцию я использую для сравнения цветов и / или как адаптировать алгоритм заливки, чтобы такие полосы не оставались вокруг объектов?
Я пытался указать алгоритму всегда заполнять пиксель, если его альфа <90%, и иногда это выглядит нормально, но он слишком агрессивен при заполнении слабых линий. </p>
Редактировать: чтобы уточнить, как это выглядит, когда 0 - 5 представляет красные пиксели, альфа 0, 20, 40, 60, 80 и 100%, изображение сглаженной красной линии может выглядеть так:
0 0 0 0 0 0 0
0 0 0 3 0 0 0
0 0 3 5 3 0 0
0 0 3 5 3 0 0
0 0 3 5 3 0 0
0 0 0 3 0 0 0
0 0 0 0 0 0 0
Мой текущий алгоритм заливки заливки красным цветом в верхнем левом углу заменит все 0 на 5. Остальные 3 образуют уродливый ореол вокруг линии.