开罗渐变图案不使用设置颜色

Cairo gradient pattern not using set colors

本文关键字:设置 颜色 罗渐变 渐变      更新时间:2023-10-16

我一直在尝试使用以下代码来设置渐变,但它显示了从黑色到白色的渐变(显然不是颜色(。

cairo_t *cr;
cr = gdk_cairo_create(widget->window);
cairo_pattern_t *pat1;  
pat1 = cairo_pattern_create_linear(0.0, 0.0,  50.0, 512);
cairo_pattern_add_color_stop_rgb(pat1, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgb(pat1, 1, 1, 254, 255);
cairo_pattern_add_color_stop_rgb(pat1, 2, 2, 253, 255);
cairo_pattern_add_color_stop_rgb(pat1, 3, 3, 252, 255);
cairo_pattern_add_color_stop_rgb(pat1, 4, 4, 251, 255);
cairo_pattern_add_color_stop_rgb(pat1, 5, 5, 250, 255);
cairo_pattern_add_color_stop_rgb(pat1, 6, 6, 249, 255);
cairo_pattern_add_color_stop_rgb(pat1, 7, 6, 249, 255);
cairo_pattern_add_color_stop_rgb(pat1, 8, 7, 248, 255);
cairo_pattern_add_color_stop_rgb(pat1, 9, 8, 247, 255);
cairo_rectangle(cr, 0, 0, 50, 512);
cairo_set_source(cr, pat1);
cairo_fill(cr);  
cairo_pattern_destroy(pat1);
cairo_destroy(cr);

但是,此代码显示从红色到紫色再到蓝色的渐变:

cairo_t *cr;
cr = gdk_cairo_create(widget->window);
cairo_pattern_t *pat1;  
pat1 = cairo_pattern_create_linear(0.0, 0.0,  50.0, 512);
cairo_pattern_add_color_stop_rgb(pat1, 0, 256, 0, 0);
cairo_pattern_add_color_stop_rgb(pat1, 1, 0, 0, 256);
cairo_pattern_add_color_stop_rgb(pat1, 2, 0, 256, 256);
cairo_rectangle(cr, 0, 0, 50, 512);
cairo_set_source(cr, pat1);
cairo_fill(cr);  
cairo_pattern_destroy(pat1);
cairo_destroy(cr);

为什么第一个显示灰度,而第二个没有?顶部有非灰度颜色,所以我不知道为什么它不起作用。

编辑:一个答案解释说,大于 1 的值被固定,所以我将我的代码更改为:

cairo_pattern_add_color_stop_rgb(pat1, 0, 0, 0, 0);
cairo_pattern_add_color_stop_rgb(pat1, 1, (1/256), (254/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 2, (2/256), (253/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 3, (3/256), (252/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 4, (4/256), (251/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 5, (5/256), (250/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 6, (6/256), (249/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 7, (6/256), (249/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 8, (7/256), (248/256), (255/256));
cairo_pattern_add_color_stop_rgb(pat1, 9, (8/256), (247/256), (255/256));

酒吧现在完全是黑色的。

https://www.cairographics.org/manual/cairo-cairo-t.html#cairo-set-source-rgb

颜色和 alpha 分量是 0 到 1 范围内的浮点数。如果传入的值超出该范围,它们将被钳制。

工作的 256 被钳制为 1。 所以你得到 (1,0,0( 到 (0,0,1( 到 (0,1,1(。

在不起作用的那个中,第一个停止保持 (0,0,0(,每隔一个停止被钳制到 (1,1,1(。 简而言之,黑色到白色是第一个中使用的颜色。 所以开罗显示黑色到白色。