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

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

Результирующее изображение:

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

Код:

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);

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

0

Решение

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

0

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

Других решений пока нет …

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