CAIRO_OPERATOR_CLEAR не работает должным образом

Я хочу удалить части ранее заполненной формы с помощью Cairo и C ++.

Рассмотрим следующее MWE:

void test(cairo_t *cr){
cairo_set_source_rgb(cr, 1, 1, 1);
cairo_paint(cr); //background

cairo_rectangle(cr, 50, 50, 150, 150);
cairo_set_source_rgb(cr, 0, 0, 1);
cairo_fill(cr); //first rect
cairo_set_operator(cr,CAIRO_OPERATOR_CLEAR);
cairo_arc(cr, 100, 100, 100, 0, M_PI * 2);
cairo_fill(cr); //circle that show remove a part of the rect
}

Это приводит к следующей картине:

введите описание изображения здесь

Согласно документация Я бы не ожидал, что черный цвет вообще исчезнет, ​​и все части синего прямоугольника, которые находятся под кругом, будут удалены (и, следовательно, белый как фон).

Я неправильно понял оператора? Я сделал какую-то ошибку?

2

Решение

Как Каир узнает, что вы считаете фоном?

В документации, на которую вы ссылаетесь, упоминается, что для альфа-каналов и всех цветовых каналов установлено значение 0. Это полностью прозрачный черный.

Примером в документации является изображение с альфа-каналом, и поэтому очищенные части становятся прозрачными.

Вы используете изображение без альфа-канала, и поэтому очищенные части становятся черными.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector