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

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



一个工作的256s固定为1。因此,您得到(1,0,0)到(0,0,1)到(0,1,1)。

在不起作用的那个中,第一个保留为(0,0,0),每隔一个止动点被钳制为(1,1,1)。简而言之,黑色到白色是第一个中使用的颜色。因此,开罗显示黑到白。

关于c++ - 开罗渐变图案不使用设置的颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44570272/

10-11 23:12
查看更多