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

0

Следующий код должен создавать два перекрывающихся прямоугольника (см. Руководство оператора, но значения альфа игнорируются:

Результат:

Изображение 174551

Код:

cairo_surface_t *surface;
cairo_t *cr;
int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32,WIDTH);
unsigned char *buffer = new unsigned char[stride * HEIGHT];
surface = cairo_image_surface_create_for_data(buffer,CAIRO_FORMAT_ARGB32,WIDTH,HEIGHT,stride);
cr = cairo_create (surface);

cairo_set_source_rgb(cr, 0, 0, 0);
cairo_rectangle (cr,0,0,WIDTH,HEIGHT);
cairo_fill (cr);

cairo_set_source_rgba(cr,0xFF,0,0,0xFF);
cairo_set_line_width (cr, 3);
cairo_rectangle(cr,WIDTH/2,HEIGHT/2,WIDTH/3,HEIGHT/3);
cairo_fill(cr);

cairo_set_operator(cr,CAIRO_OPERATOR_OVER);

cairo_set_source_rgba(cr,0,0,0xFF,0x7F);
cairo_set_line_width (cr,3);
cairo_rectangle(cr,WIDTH/3,HEIGHT/3,WIDTH/3,HEIGHT/3);
cairo_fill(cr);

cairo_surface_write_to_png(surface,"c:\\temp\\test.png");

delete[] buffer;
cairo_destroy(cr);
cairo_surface_destroy(surface);

Вы знаете, в чем проблема?

Теги:
cairo

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню