CAIRO_OPERATOR_OVER未按预期工作

时间:2014-04-09 08:48:07

标签: c++ cairo

以下代码应创建两个重叠的矩形(请参阅operator guide,但忽略alpha值:

结果图片:

enter image description here

代码:

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

你知道问题可能是什么吗?

1 个答案:

答案 0 :(得分:0)

我的问题是,每个RGBA组件是从0到1的浮点值,而不是从0到0xFF的字节值。因此我提供的alpha信息是错误的。