Представьте, что вы хотите нарисовать половину пикселя красным: вы делаете cairo_rectangle(cr, 42, 42, 0.5, 1);
, чтобы получить прямоугольник шириной в половину пикселя. Затем вы устанавливаете красный исходный цвет и рисуете это (на белом фоне).
Каков будет ожидаемый результат?
Ну, половина пикселя - белая ((1, 1, 1)
), половина - красная ((1, 0, 0)
). Таким образом, логичным будет смешать красный и белый, в результате чего получится цвет (1, 0.5, 0.5)
.
Далее вы хотите нарисовать ту же «половину пикселя» белым цветом. Информация о том, что «левая половина» пикселя красная, а «правая половина» белая, нигде не была сохранена. Итак, у пикселя есть только эта «красновато-белая смесь». Итак, опять же, требуется некоторое смешение: половина (1, 0.5, 0.5)
и половина (1, 1, 1)
равны (1, 0.75, 0.75)
, или смесь 1/4 красного и 3/4 белого.
Итак, хотя мы залили ту же самую геометрию сначала красным, а затем белым, красный все еще частично виден.
Какое это имеет отношение к сглаживанию? Круг не идеально вписывается в круговую сетку. Итак, около края вы получите несколько пикселей, которые только частично находятся внутри круга. Сглаживание означает, что сделано нечто подобное тому, что я объяснил выше: цвет фона и цвет заливки круга смешаны. Таким образом, это смешение означает, что некоторые из первых цветов остаются видимыми после того, как круг снова «стерт».